本帖最后由 QMXi 于 2018-1-25 13:54 编辑
我用的是stm32f407加OV2640,120x160的图像,如图所示,公式是按照网上查的公式写的,R,G,B三 {MOD}提取后显示的都是蓝 {MOD},合成灰度后也显示的是蓝 {MOD},哪位大神知道是公式的原因还是其他的原因?
u32 RGB_BUF[Width][High];
u32 RGB_BUF[Width][High];
u32 R,G,B;
void RGB_data_process(void)
{
u16 i,j;
for(i=0;i<Width;i++)
for(j=0;j<High;j++)
{
LCD_SetCursor(j,i);
LCD_WriteRAM_Prepare();
R = (RGB_BUF[j] & 0x00FF0000) >> 16;
G = (RGB_BUF[j] & 0x0000FF00) >> 8;
B = (RGB_BUF[j] & 0x000000FF) >> 0;
LCD->LCD_RAM = ( R*38 + G * 75 + B * 15 )>>7;
}
}
这是部分程序,灰度转换后显示出来的是蓝 {MOD}的,难道是公式的问题?这个是在网上搜的一个公式,RGB565应该是16位图像,为什么定义时是u32类型?(u32 RGB_BUF[Width][High]),按照道理应该是16位,分别右移5位,11位才对
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
u32 RGB_BUF[Width][High];
void RGB_data_process(void)
{
u16 i,j;
for(i=0;i<Width;i++)
for(j=0;j<High;j++)
{
LCD_SetCursor(j,i);
LCD_WriteRAM_Prepare();
R = (RGB_BUF[j] & 0x00FF0000) >> 16;
G = (RGB_BUF[j] & 0x0000FF00) >> 8;
B = (RGB_BUF[j] & 0x000000FF) >> 0;
LCD->LCD_RAM = ( R*38 + G * 75 + B * 15 )>>7;
}
}
这个是我程序,昨天忘贴出来了,这个是按照网上公式来计算的,但是显示的是蓝 {MOD}的,还有一个问题就是RGB565不是16位吗?为什么定义时是32位的(u32格式)? R = (RGB_BUF[j] & 0x00FF0000) >> 16; 这个右移了16位?
一周热门 更多>