绘制灰度图像(vcmfc图像编程技巧)

绘制灰度图像(vcmfc图像编程技巧)

ID:24802024

大小:19.20 KB

页数:4页

时间:2018-11-15

绘制灰度图像(vcmfc图像编程技巧)_第1页
绘制灰度图像(vcmfc图像编程技巧)_第2页
绘制灰度图像(vcmfc图像编程技巧)_第3页
绘制灰度图像(vcmfc图像编程技巧)_第4页
资源描述:

《绘制灰度图像(vcmfc图像编程技巧)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、绘制灰度图像有时一幅灰度位图比一幅彩色位图更能吸引人,如在一些游戏中对往事的回忆常把场景设置成灰色,是不是有一种往事的感觉?对于位图的灰度显示技术在很多文章中都有介绍,但它们大多都是针对DOS下的程序,有些是WINDOWS下的,但它们只涉及到对系统调色板的修改,对系统不支持调色板的情况却没有提及。如今,系统随着软硬件的不断升级,系统已从过去的256色过渡到真彩色,再不支持调色板,过去的处理方法也就无能为力了,虽然我们可以将系统的颜色属性设置成256色,但这并不是一种好办法,其实我们可以直接修改位图

2、的调色板来达到我们的目的。下面是我给出的一段程序,愿与大家共享。方法如下:1、求位图的颜色数,判断是否小于256。2、利用GetDeviceCaps(RASTERCAPS)函数与PC_PALETTE,确定系统是否支持调色板。3、如果系统支持调色板,创建逻辑调色板,并用位图颜色表的颜色值转化成对应灰度值赋予系统调色板。4、如果系统不支持调色板,直接修改位图的颜色表。5、显示位图。对于灰度转换的计算公式,我们可选用经典公式nGray=0.299*R+0.587*G+0.114*B//参数说明:hDIB

3、--位图句柄voidDrawGray2D(CDC*pDC,HANDLEhDIB){CPalettepal;CPalette*OldPal;BITMAPINFO&bmInfo=*(LPBITMAPINFO)hDIB;//计算位图颜色数intnColors=bmInfo.bmiHeader.biClrUsed?bmInfo.bmiHeader.biClrUsed:1<GetDeviceCaps(RASTERCAPS)&RC_P

4、ALETTE&&nColors<=256){//如果系统支持调色板且位图小于256色。//分配内存给调色板UINTnSize=sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY)*nColors);LOGPALETTE*pLP=(LOGPALETTE*)newBYTE[nSize];//初始化系统调色板版本号pLP->palVersion=0x300;//调色版颜色数pLP->palNumEntries=nColors;//设置灰度调色板for(inti=0;i

5、lors;i++){intnGray=(bmInfo.bmiColors[i].rgbRed*299+bmInfo.bmiColors[i].rgbGreen*587+bmInfo.bmiColors[i].rgbBlue*114)/1000;//修改系统调色板pLP->palPalEntry[i].peRed=nGray;pLP->palPalEntry[i].peGreen=nGray;pLP->palPalEntry[i].peBlue=nGray;pLP->palPalEntry[i].p

6、eFlags=0;}pal.CreatePalette(pLP);delete[]pLP;//选择调色板OldPal=pDC->SelectPalette(&pal,FALSE);pDC->RealizePalette();}elseif((pDC->GetDeviceCaps(RASTERCAPS)&RC_PALETTE)==0&&nColors<=256){//系统不支持调色板,但位图颜色小于256色for(inti=0;i

7、olors[i].rgbRed*299+bmInfo.bmiColors[i].rgbGreen*587+bmInfo.bmiColors[i].rgbBlue*114)/1000;//修改位图调色板bmInfo.bmiColors[i].rgbRed=nGray;bmInfo.bmiColors[i].rgbGreen=nGray;bmInfo.bmiColors[i].rgbBlue=nGray;}}intnWidth=bmInfo.bmiHeader.biWidth;intnHeight=b

8、mInfo.bmiHeader.biHeight;LPVOIDlpDIBBits=(LPVOID)(bmInfo.bmiColors+nColors);//绘制位图::SetDIBitsToDevice(pDC->m_hDC,0,0,nWidth,nHeight,0,0,0,nHeight,lpDIBBits,(LPBITMAPINFO)hDIB,DIB_RGB_COLORS);if(pDC->GetDeviceCaps(RASTERCAPS)&RC_PALETTE)pDC->Se

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。