我用lpc1788做一个图片显示的程序。刚开始试验时,是将24位图片转换成C语言数组,直接映射到显存地址,显示图片,图片显示正常。后来我按照这个思路,从SD卡读取显示图片,发现图片像素值错位了。我将pDst16数据通过串口发送出来发现和数组的形式是一样的,所以我现在不知道是哪个地方出了问题。
这个是正确的:
pDst16 = (unsigned long *)LCD_VRAM_BASE_ADDR;
pBmp8 = (uint8_t *)ac480x272Pic01;//数组转换成指针,并把高低位组合
for(i=0;i<(C_GLCD_H_SIZE * C_GLCD_V_SIZE);i++)
{
*pDst16 =*pBmp8++<<16;
*pDst16 +=*pBmp8++<<8;
*pDst16 +=*pBmp8++;
*pDst16++;
}
错误的:
pDst16 = (unsigned long *)LCD_VRAM_BASE_ADDR;
for (i=0;i<480*272;i++)
{
f_read(&bmpfsrc,&pColorData,3,&read_num); // 每次读取三个像素
pBmp8 = (uint8_t *)pColorData; // 数组转换成指针
*pDst16 =*pBmp8++<<16;
*pDst16 +=*pBmp8++<<8;
*pDst16 +=*pBmp8++; // 三个像素高低位组合,映射到LCD地址上
//xprintf("%d:%x
",i,*pDst16++);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>