发布时间 : 星期六 文章VC数字图像处理编程讲座之一更新完毕开始阅读6a20e79951e79b8968022653
HANDLE data1handle;
LPBITMAPINFOHEADER lpBi; BITMAPINFO *m_pBMI;
CDibDoc *pDoc=GetDocument(); HDIB hdib;
unsigned char *hData; unsigned char *data;
hdib=pDoc->GetHDIB();//得到位图数据的句柄,其中包含图像信息头 BeginWaitCursor();
lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib); hData=(unsigned char*)FindDIBBits((LPSTR)lpBi); m_pBMI=new BITMAPINFO;//生成彩色图像的信息头 m_pBMI->bmiHeader.biBitCount=24; m_pBMI->bmiHeader.biClrImportant=0; m_pBMI->bmiHeader.biClrUsed=0;
m_pBMI->bmiHeader.biCompression=BI_RGB; m_pBMI->bmiHeader.biHeight=lpBi->biHeight; m_pBMI->bmiHeader.biWidth=lpBi->biWidth; m_pBMI->bmiHeader.biPlanes=1;
m_pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); m_pBMI->bmiHeader.biXPelsPerMeter=0; m_pBMI->bmiHeader.biYPelsPerMeter=0;
m_pBMI->bmiHeader.biSizeImage=WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight*3;
file://data=hData; int R,G,B,i,j;
data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight*3);
file://生成存储彩色图象数据的缓冲区
data=(unsigned char*)GlobalLock((HGLOBAL)data1handle); for(i=0;ibiHeight;i++)//实现灰度到彩色变换 for(j=0;jbiWidth*8);j++) {
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=64) {R=0;
G=(int)4*(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j));
中国图象图形网 www.image2003.com
B=255; }
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)>64
&& *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=128) {R=0; G=255;
B=(int)4*(128-*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)); }
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)>128
&& *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=192)
{R=(int)4*(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)-128); G=255; B=0; }
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)>192
&& *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=255) {R=255;
G=(int)4*(255-*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)); B=0;
}
file://将生成的R、G、B分量存入目标缓冲区
*(data+i*WIDTHBYTES(lpBi->biWidth*8)*3+j*3)=B; *(data+i*WIDTHBYTES(lpBi->biWidth*8)*3+j*3+1)=G; *(data+i*WIDTHBYTES(lpBi->biWidth*8)*3+j*3+2)=R; }
GlobalUnlock((HGLOBAL)hdib); GlobalUnlock(data1handle); EndWaitCursor(); CClientDC pDC(this);
file://显示真彩色图像
StretchDIBits(pDC.GetSafeHdc(),0,0,lpBi->biWidth,lpBi->biHeight,0,0,
lpBi->biWidth,
>biHeight,data,m_pBMI,DIB_RGB_COLORS, SRCCOPY); delete m_pBMI;
lpBi-
中国图象图形网 www.image2003.com
}
中国图象图形网
www.image2003.com