本帖最后由 rjx007 于 2018-2-23 15:48 编辑
想用TFTLCD显示一幅图片,看了原子等例程,觉得太复杂了,又是读SD卡,又是文件系统什么的,太难了,一下子学不会。我想从最简单的入手,因为只显示一幅简单图片,所以用软件(如Image2lcd)将图片转成点阵数组(像显示文字似的),再用一个图片显示函数显示出来,试了很多次都不成功,屏上是乱的。不知是取模不对还是函数用的不对,劳驾高手能指导一下。
下面取模对吗?图片函数如下: 又问:函数的形参 *pic 是Image2lcd生成的C文件,还是文件中的数组?如何传递这个形参呢?
//图像显示函数,适用Image2Lcd V2.9
void Picture_Draw(u16 S_x,u16 S_y,const unsigned char *pic)
{
u32 i=8,len;
u16 temp,x,y,D_x=0,D_y=0;
x=(uint16_t)((pic[2]<<8)+pic[3])-1; //获取图片的宽度
y=(uint16_t)((pic[4]<<8)+pic[5])-1; //获取图片的高度
len=2*x*y; //获取图片像素点数
while(i<(len+8)) //显示所有像素点
{
temp=(uint16_t)((pic<<8)+pic[i+1]);//image2lcd生成的是8位数组,十六位真彩 {MOD}图像生成为高8位和低8位,这儿将其转换成16位数据,
if(D_x>x) {D_x=0;D_y++;}//逐行显示
LCD_DrawFRONT_COLOR(S_x+D_x,S_y+D_y,temp); //画点,拼凑图像,调用快速画点函数
D_x++;
i=i+2;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- 弄了一个非常简单的黑白图片(60x48),用Image2Lcd转成一个C文件,再用图片显示函数:LCD_ShowPicture(10, 10, 100, 100,"tu3");显示,
显示图片的函数:void LCD_ShowPicture(u16 x, u16 y, u16 wide, u16 high,u8 *pic)
{
u16 temp = 0;
long tmp=0,num=0;
LCD_Set_Window(x, y, x+wide-1, y+high-1);
num = wide * high*2 ;
do
{
temp = pic[tmp + 1];
temp = temp << 8;
temp = temp | pic[tmp];
LCD_WriteData_Color(temp);//逐点显示
tmp += 2;
}
while(tmp < num);
}
显示的图像如下:
原图:tu1.jpg 显示成这样了:tu3.jpg
XY 区域画位置正常,取代码错了。
是普中科技的开发板和屏,例程也是他们的。
一周热门 更多>