分享

vc++ bayer转换成rgb

 dadaadao 2011-09-30

#define B(x,y)   pRGB24[0 + 3 * ((x) + MyBmpInfo->biWidth * (y))]
#define G(x,y)   pRGB24[1 + 3 * ((x) + MyBmpInfo->biWidth * (y))]
#define R(x,y)   pRGB24[2 + 3 * ((x) + MyBmpInfo->biWidth * (y))]
#define Bay(x,y) pBay[(x) + MyBmpInfo->biWidth * (y)]




void CMyDlg::bayer_bilinear(BYTE *pBay, BYTE *pRGB24, int x, int y)
{       

float tmp;

tmp=(((UINT)Bay(x + 0, y + 1) + (UINT)Bay(x + 0, y - 1)) / 2)*fratio_B;
if(tmp>255)
tmp=255;
B(x + 0, y + 0) = (BYTE)tmp;

tmp=Bay(x + 0, y + 0)*fratio_G;
if(tmp>255)tmp=255;
G(x + 0, y + 0) = (BYTE)tmp;

tmp=(((UINT)Bay(x - 1, y + 0) + (UINT)Bay(x + 1, y + 0)) / 2)*fratio_R;
if(tmp>255)
tmp=255;

R(x + 0, y + 0) = (BYTE)tmp;
///////////

tmp=Bay(x + 0, y + 1)*fratio_B;
if(tmp>255)tmp=255;
B(x + 0, y + 1) =(BYTE)tmp; 

tmp=( ((UINT)Bay(x + 0, y + 0) + (UINT)Bay(x + 0, y + 2)
+ (UINT)Bay(x - 1, y + 1) + (UINT)Bay(x + 1, y + 1)) / 4)*fratio_G;
if(tmp>255)tmp=255;
G(x + 0, y + 1) =(BYTE)tmp;

tmp=(((UINT)Bay(x + 1, y + 0) + (UINT)Bay(x - 1, y + 0)
+ (UINT)Bay(x + 1, y + 2) + (UINT)Bay(x - 1, y + 2)) / 4)*fratio_R;
if(tmp>255)
tmp=255;
R(x + 0, y + 1) =(BYTE)tmp ;

////////////////
tmp=(((UINT)Bay(x + 0, y + 1) + (UINT)Bay(x + 2, y + 1)
+ (UINT)Bay(x + 0, y - 1) + (UINT)Bay(x + 2, y - 1)) / 4)*fratio_B;
if(tmp>255)tmp=255;
B(x + 1, y + 0) = (BYTE)tmp;

tmp=(((UINT)Bay(x + 0, y + 0) + (UINT)Bay(x + 2, y + 0)
+ (UINT)Bay(x + 1, y - 1) + (UINT)Bay(x + 1, y + 1)) / 4)*fratio_G;
if(tmp>255)tmp=255;
G(x + 1, y + 0) = (BYTE)tmp;

tmp=Bay(x + 1, y + 0)*fratio_R;
if(tmp>255)
tmp=255;
R(x + 1, y + 0) =(BYTE)tmp ;


////////////////////
tmp=( ((UINT)Bay(x + 0, y + 1) + (UINT)Bay(x + 2, y + 1)) / 2)*fratio_B;
if(tmp>255)
tmp=255;
B(x + 1, y + 1) =(BYTE)tmp;

tmp=Bay(x + 1, y + 1)*fratio_G;
if(tmp>255)tmp=255;
G(x + 1, y + 1) = (BYTE)tmp;

tmp=( ((UINT)Bay(x + 1, y + 0) + (UINT)Bay(x + 1, y + 2)) / 2)*fratio_R;
if(tmp>255)
tmp=255;
R(x + 1, y + 1) =(BYTE)tmp;
}

void CMyDlg::bayer_to_rgb24(BYTE *pBits, BYTE *pRGB24)
{
int i, j;
for (i = 0; i < MyBmpInfo->biWidth-2; i += 2)
{
for (j = 1; j < MyBmpInfo->biHeight-2; j += 2)
{
bayer_bilinear(pBits, pRGB24, i, j);
}
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多