这个函数都做了什么?

erdgzw 2006-10-01 05:55:53
HBITMAP MakeImage(HBITMAP hBitmap)
{
HBITMAP hNewBmp;

if (hBitmap)
{
HDC hBufferDC = CreateCompatibleDC(NULL);
HGDIOBJ hPrevBufObject = SelectObject(hBufferDC, hBitmap);

HDC hDirectDC = CreateCompatibleDC(NULL); // DC for working
if (hDirectDC)
{
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
BITMAPINFO bmInfo;
ZeroMemory(&bmInfo,sizeof(bmInfo));
bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth = bm.bmWidth;
bmInfo.bmiHeader.biHeight = bm.bmHeight;
bmInfo.bmiHeader.biPlanes = 1;
bmInfo.bmiHeader.biBitCount = 32;
UINT* ptPixels;
HBITMAP hDirectBitmap = CreateDIBSection(hDirectDC,
(BITMAPINFO*)&bmInfo,
DIB_RGB_COLORS,(void**)&ptPixels, NULL, 0);
if (hDirectBitmap)
{
// 将hDirectBitmap放入hDirectDC中处理
HGDIOBJ hPrevBufDirObject = SelectObject(hDirectDC, hDirectBitmap);
// 当前将原hBitmap即屏幕的所有像素写入到hDirectDC
BitBlt(hDirectDC,0,0,bm.bmWidth,bm.bmHeight,hBufferDC,0,0,SRCCOPY);

int nSize = bm.bmWidth * bm.bmHeight;
for (int i=0; i<nSize; i++)
{
int iSrcR = (ptPixels[i]) & 0x00ff0000 >>16;
int iSrcG = (ptPixels[i]) & 0x0000ff00 >> 8;
int iSrcB = (ptPixels[i]) & 0x000000ff;

ptPixels[i] = RGB(iSrcR,iSrcG,iSrcB);
}
SelectObject(hDirectDC,hPrevBufDirObject);
hNewBmp = hDirectBitmap;
}
DeleteDC(hDirectDC);
}
SelectObject(hBufferDC, hPrevBufObject);
DeleteDC(hBufferDC);
}
return hNewBmp;
}

我感觉这个函数应该什么也没有改变啊!为什么会返回一个灰度化的一个位图呢?
...全文
165 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_anthony 2006-10-02
  • 打赏
  • 举报
回复
这代码会灰度化?应该是没有改变吧!?

ptPixels[i] = RGB(iSrcR,iSrcG,iSrcB);
的上面加一句iSrcR=iSrcG=iSrcB=0.3*iSrcR+0.59*iSrcG+0.11*iSrcB;
才会灰度化吧?
erdgzw 2006-10-01
  • 打赏
  • 举报
回复
弄明白了,应该改为:
int iSrcR = ((ptPixels[i]) & 0x00ff0000) >> 16;
int iSrcG = ((ptPixels[i]) & 0x0000ff00 )>> 8;
int iSrcB = ((ptPixels[i]) & 0x000000ff);

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧