VC数字图像处理编程讲座之一 联系客服

发布时间 : 星期六 文章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