2012-04-17 92 views
3

我正在写一个程序,打开,旋转,缩放,反转颜色,转换为灰度并保存位图(.bmp) 但我似乎并没有得到转换为灰度(即黑色和白色)工作的所有其他代码工作完美...Win32位图颜色为灰度

的代码为我的色彩反转低于...

case 3: 
{ 
    hdc=GetDC(hWnd); 
    GetClientRect(hWnd,&rt); 
    BitBlt(hdc,0,0,rt.right,rt.bottom,hdc,0,0,NOTSRCCOPY); 
    ReleaseDC(NULL,hdc); 
} 

这似乎工作,但得到的DC,并试图将其更改为灰度ISN”使用BitBlt工作... 我想了解如何获得DC并将其转换为灰度... wi napi 谢谢...

+1

是不是颜色反转像'255-x'?现在,你正在做'〜x',这根本不是同一个计算。虽然这两者都是颜色的“反转”,但前者反转色彩比例,而后者反转像素比特模式。 – 2012-04-17 19:19:26

+0

'BitBlt'后'GetLastError()'返回什么? – 2012-04-17 19:21:51

+0

BitBlt(hdc,0,0,rt.right,rt.bottom,hdc,0,0,NOTSRCCOPY);对于反转位图颜色正常工作...似乎没有工作是使用bitblt将图像转换为灰度...我试过BitBlt(hdc,0,0,rt.right,rt.bottom,hdc, 0,0,BLACKNESS |白化);但它不工作...也许我不会使用bitblt ... – Alex 2012-04-17 19:44:39

回答

2

Raymond Chen给出了一个complete example使用GDI中的颜色映射器使用BitBlt将彩色图像转换为灰度。

+0

+在这个问题中的另一个代码片段:http://stackoverflow.com/questions/8559341/how-to-convert-bitmap-to-灰度逐像素强度使用-GDI – 2012-04-17 19:32:21