bmp 图片解析绘图 RGB 转YUV 查表法 ,降低CPU占有率
【摘要】
unsigned char y_r[256];
unsigned char y_g[256];
unsigned char y_b[256];
unsigned char u_r[256];
unsigned char u_g[256];
unsigned char u_b[256];
unsigned char v_r[256];
u...
unsigned char y_r[256];
unsigned char y_g[256];
unsigned char y_b[256];
unsigned char u_r[256];
unsigned char u_g[256];
unsigned char u_b[256];
unsigned char v_r[256];
unsigned char v_g[256];
unsigned char v_b[256];
void gif_init_Palette(void)
{
int i=0;
for(i=0;i<256;i++)
{
#if 0
y_r[i]=66 * i/ 256;
u_r[i]=38* i/ 256;
v_r[i]=112 * i/ 256;
y_g[i]=129* i/ 256;
u_g[i]=74 * i/ 256;
v_g[i]=94 * i/ 256;
y_b[i]=25* i/ 256;
u_b[i]=112 * i/ 256;
v_b[i]=18 * i/ 256;
#else
y_r[i]=(66 * i)>>8;
u_r[i]=(38* i)>>8;
v_r[i]=(112 * i)>>8;
y_g[i]=(129* i)>>8;
u_g[i]=(74 * i)>>8;
v_g[i]=(94 * i)>>8;
y_b[i]=(25* i)>>8;
u_b[i]=(112 * i)>>8;
v_b[i]=(18 * i)>>8;
#endif
}
}
上述是RGB 转YUV 3个分量的转换方法‘
static int _DrawBitmap(const unsigned char * pData, int x0, int y0, int XSize, int YSize, int Bpp, int NumColors) {
int i, j, Step,BytesPerLine = 0;
unsigned int Offset;
char *p;
Window_Para_t window;
unsigned int color;
unsigned char r,g,b ;
unsigned int palette[256];
unsigned int y = 0,cb0=0,cr0 = 0;
unsigned short cby = 0,cry = 0;
unsigned short *pPicUse = (unsigned short*)pSppbufer; //gMultiPicBuf;//
for (i = 0; i < NumColors; i++) {
unsigned char r, g, b;
b = *(pData);
g = *(pData + 1);
r = *(pData + 2);
pData += 4;
palette[i] = ((unsigned int)b << 16) | (g << 8) | r;
}
#if 0
switch (Bpp) {
case 1:
BytesPerLine = ((XSize + 31) >> 5) << 2;
break;
case 4:
BytesPerLine = (((XSize << 2) + 31) >> 5) << 2;
break;
case 8:
BytesPerLine = ((XSize + 3) >> 2) << 2;
break;
}
#endif
window.PositionX=x0;
window.PositionY=y0;
window.Width=XSize;
window.Height=YSize;
gx_mhp_set_spp_display(&window);
*(volatile int*)0x40005028 |= (1<<1);//12 15
unsigned short y2,u,v;
for(i = 0; i < YSize; i++)
{
for(j = 0; j < XSize; j++)
{
//unOffset = (YSize - i - 1)* (XSize +2)+j;
Offset = (YSize - i - 1)* (XSize)+j;
//Offset=(YSize - i - 1)* ((((XSize * Bpp) + 31) >> 5)<<2)+ j;
color=palette[(pData[Offset])];
r = color&0xff;
g =( color>>8)&0xff;
b = (color>>16)& 0xff;
#if 0
if(j%2)
{
y = ((4*r+8*g+2*b)>>4);
cr0 = 128+((7*r-6*g-b)>>4);
cry = (cr0<<8)+y;
*(pPicUse + i* XSize +j) = cry;
}
else
{
y = ((4*r+8*g+2*b)>>4);
cb0 = 128+((-2*r-5*g+7*b)>>4);
cby = (cb0<<8)+y;
*(pPicUse + i* XSize +j) = cby;
}
#else
y2 = y_r[r]+y_g[g]+y_b[b]+16;
u = -u_r[r]-u_g[g]+u_b[b]+128;
v = v_r[r]-v_g[g]-v_b[b]+128;
y2 = y2&0xfc;
u = u&0xf0;
v = v&0xf0;
if(pData[Offset]!=0)
{
*(pPicUse + i* XSize +j) = ((U16)(y2<<8))|((U16)(u<<2))|((U16)(v>>2))|3;
}
else
{
*(pPicUse + i* XSize +j) = 0;
}
#endif
}
}
return 0;
}
’
文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/xushx_bigbear/article/details/122730932
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)