RGB565图像转灰度图像解决办法
RGB565图像转灰度图像
各位大侠,我写了个RGB565转灰度图像的算法,但是转换后的灰度图像过暗,不知道是怎么回事,求帮助啊...
565图像
灰度图像
------解决方案--------------------
unsigned char chR = ((*(pData565 + iIndex) & RGB565_MASK_RED) >> 11 ) << 3;
unsigned char chG = ((*(pData565 + iIndex) & RGB565_MASK_GREEN) >> 5) << 2;
unsigned char chB = (*(pData565 + iIndex) & RGB565_MASK_BLUE) << 3 ;
>> 的优先级比 & 高, 再加括号的说...
各位大侠,我写了个RGB565转灰度图像的算法,但是转换后的灰度图像过暗,不知道是怎么回事,求帮助啊...
- C/C++ code
#define RGB565_MASK_RED 0xF800 #define RGB565_MASK_GREEN 0x07E0 #define RGB565_MASK_BLUE 0x001F void Convert(unsigned char *img565, unsigned char *imgGray, int iWidth, int iHeight) { WORD *pData565 = (WORD*)img565; int iIndex = 0; for (int x = 0; x < iHeight; ++x) { for (int y = 0; y < iWidth; ++y) { unsigned char chR = *(pData565 + iIndex) & RGB565_MASK_RED >> 11; unsigned char chG = *(pData565 + iIndex) & RGB565_MASK_GREEN >> 5; unsigned char chB = *(pData565 + iIndex) & RGB565_MASK_BLUE; // unsigned char chGray = (chB*11 +chR*30 +chG*59+50)/100; unsigned char chGray = (chB*0.3 +chR*0.11 +chG*0.59); // unsigned char chGray = (chR + chG + chB) / 3.0; // unsigned char chGray = (chB*29 +chR*77 +chG*150+128)/256; // unsigned char chGray = (chB/31.0*0.3 +chR/31.0*0.11 +chG/63.0*0.59)*255; *(imgGray + x * iWidth + y) = chGray; ++iIndex; } } }
565图像
灰度图像
------解决方案--------------------
unsigned char chR = ((*(pData565 + iIndex) & RGB565_MASK_RED) >> 11 ) << 3;
unsigned char chG = ((*(pData565 + iIndex) & RGB565_MASK_GREEN) >> 5) << 2;
unsigned char chB = (*(pData565 + iIndex) & RGB565_MASK_BLUE) << 3 ;
>> 的优先级比 & 高, 再加括号的说...