小弟最近做一个bmp位图的简单显示程序,先用软件把24位的bmp位图转成数组,然后把图像数据区数据按三字节读出,获得bmp的BGR数据,然后编写算法转成5:6:5适合lcd显示的16位数据,下载后,发现图像水平方向出现两幅一样的图,垂直方向不能完全显示,以下为24位真彩数据转换5:6:5的代码:
void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
{
u32 i, total;
u16 data1,data2,data3;
u16 data4;
u16 *picturepointer = pic;
u16 x,y;
u16 R,G,B;
u16 color;
x=StartX;
y=StartY;
total = (EndX - StartX + 1)*(EndY - StartY + 1 );
for (i=0;i<total/2;i++)
{
data1 = *picturepointer;
data2 = *(picturepointer + 1);
data3 = *(picturepointer + 2); /* RGB24转换为RGB565 */
/* 红色r占5为屏蔽低三位 绿色g占6为屏蔽低两位 蓝色b占5为屏蔽低三位 */
data3 = data1 & (~(0x07));
data2 = data2 & (~(0x03));
data1 = data3 & (~(0x7));
R = (unsigned short)data3 << 8;
G = (unsigned short)data2 << 3;
B = (unsigned short)data1 >> 3;
color = R | G | B;
ili9320_SetPoint(x,y,color);
x++;
if(x>EndX)
{
y++;
x=StartX;
}
picturepointer += 3;
}
}
请问各位高手,这是什么问题了,ili9320_SetPoint(x,y,color)为画点和颜色的函数,没有问题。为什么图片不能正常显示
|