金牌会员
 
- 积分
- 1553
- 金钱
- 1553
- 注册时间
- 2016-11-21
- 在线时间
- 411 小时
|
屏幕用的是ILI9341,渐变色只做了水平渐变,不过根据这个也可以改成 垂直渐变或者斜对角渐变,效果如图所示
typedef struct
{
u16 x0,y0,w,h;
}GUI_WIN;
typedef union
{
u16 color;
struct{
u16 b:5;
u16 g:6;
u16 r:5;
}RGB;
}GUI_COLOR;
/*
功能:绘制渐变色矩形
参数:Win:矩形窗口的位置
colorBegin:起始颜色
colorEnd: 结束颜色
*/
void GUI_FillGradientWin(GUI_WIN *win ,u16 colorBegin,u16 colorEnd)
{
u16 i,j;
float rInc,gInc,bInc;
GUI_COLOR begin,end,colorNow;
begin.color = colorBegin;
end.color = colorEnd;
rInc=(float)(end.RGB.r-begin.RGB.r)/(float)win->w; //分别计算R,G,B值的增量
gInc=(float)(end.RGB.g-begin.RGB.g)/(float)win->w;
bInc=(float)(end.RGB.b-begin.RGB.b)/(float)win->w;
LCD_SetWindow(win->x0,win->y0,win->x0+win->w-1,win->y0+win->h-1-1); //设置窗口
TFTLCD->LCD_REG=0x2C;
for(i=0;i<win->w;i++)
{
colorNow.RGB.r=begin.RGB.r+i*rInc+0.5; //计算当前坐标下颜色值的R,G,B
colorNow.RGB.g=begin.RGB.g+i*gInc+0.5;
colorNow.RGB.b=begin.RGB.b+i*bInc+0.5;
for(j=0;j<win->h;j++)
{
GUI_DrawPixel(i+win->x0,j+win->y0,colorNow.color); //画点
}
}
}
/*
功能:绘制渐变色矩形
参数:Win:矩形窗口的位置
colorTop:顶层颜色
colorBottom 底层颜色
percent:顶层颜色所实际颜色的百分比(0-100)
*/
void GUI_FillHybridWin(GUI_WIN *win ,u16 colorTop,u16 colorBottom,u8 percent)
{
u16 i,j;
GUI_COLOR top,bottom,colorNow;
top.color = colorTop;
bottom.color = colorBottom;
colorNow.RGB.r=(top.RGB.r*percent+bottom.RGB.r*(100-percent))/100;
colorNow.RGB.g=(top.RGB.g*percent+bottom.RGB.g*(100-percent))/100;
colorNow.RGB.b=(top.RGB.b*percent+bottom.RGB.b*(100-percent))/100;
LCD_SetWindow(win->x0,win->y0,win->x0+win->w-1,win->y0+win->h-1-1); //设置窗口
TFTLCD->LCD_REG=0x2C;
for(j=0;j<win->h;j++)
{
for(i=0;i<win->w;i++)
{
TFTLCD->LCD_RAM=colorNow.color;
}
}
}
|
-
|