用了原子哥JPG解码码源,显示部分:
定义图片显示格式:
unsigned short JPG2BMP[256]={0};
GUI_BITMAP JPG={
16, /* XSize */
16, /* YSize */
32, /* BytesPerLine */
16, /* BitsPerPixel */
(const unsigned char *)JPG2BMP, /*指向位图数据*/
NULL, /* 指向调色板 */
GUI_DRAW_BMP565
};
//将解出的字按RGB形式存储 lpbmp (BGR),(BGR) ......入口Y[] U[] V[] 出口lpPtr
void StoreBuffer() //一次解出16*16个点
{
short i,j;
unsigned char R,G,B;
int y,u,v,rr,gg,bb;
unsigned int color,count;
count=0;
for(i=0;i<SampRate_Y_V*8;i++)
{
if((sizei+i)<ImgHeight)// sizei表示行 sizej 表示列
{
for(j=0;j<SampRate_Y_H*8;j++)
{
if((sizej+j)<ImgWidth)
{
y=Y[i*8*SampRate_Y_H+j];
u=U[(i/V_YtoU)*8*SampRate_Y_H+j/H_YtoU];
v=V[(i/V_YtoV)*8*SampRate_Y_H+j/H_YtoV];
rr=((y<<8)+18*u+367*v)>>8;
gg=((y<<8)-159*u-220*v)>>8;
bb=((y<<8)+411*u-29*v)>>8;
R=(unsigned char)rr;
G=(unsigned char)gg;
B=(unsigned char)bb;
if (rr&0xffffff00) if (rr>255) R=255; else if (rr<0) R=0;
if (gg&0xffffff00) if (gg>255) G=255; else if (gg<0) G=0;
if (bb&0xffffff00) if (bb>255) B=255; else if (bb<0) B=0;
color=R>>3;
color=color<<6;
color |=(G>>2);
color=color<<5;
color |=(B>>3);
//在这里送给LCD显示
JPG2BMP[count]=color;
//POINT_COLOR=color;
//LCD_L0_SetPixelIndex(sizej+j,sizei+i,color);//显示图片
count++;
}
else break;
}
}
else break;
}
GUI_DrawBitmap(&JPG, sizej, sizei);
}
GUI下扫描平等方向与JPG解码时的数据增长方向都是左到右,再上到下的方向,按道理GUI_DrawBitmap()应该可以直接显示才对啊,但是仿真时可以通过,解码时JPG2BMP[256]数组里的数据也准确,但是液晶屏却什么反应都木有,,,,,,,,,,,
可是显示存放在片内FLASH的图片使用GUI_DrawBitmap()又可以正常显示,小弟愚昧,还望大家赐教啊!!!
|