2012-04-17 4 views
3

Я пишу программу, которая открывает, вращает, масштабирует, инвертирует цвет, преобразует в оттенки серого и сохраняет растровое изображение (.bmp) Но я, похоже, не получаю преобразование в оттенки серого (то есть черно-белые) работает каждый код работает отлично ...Win32 bitmap color to grayscale

код для моего инверсия цвета ниже ...

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» t, используя BitBlt ... Я хотел бы получить представление о том, как получить DC и преобразовать его в серию ... wi napi спасибо ...

+1

Не инверсия цвета что-то вроде '255-x'? Прямо сейчас, вы делаете '~ x', это совсем не то же вычисление. Хотя оба эти являются «инверсиями» цвета, первая инвертирует цветовую шкалу, тогда как последняя инвертирует пиксельные битовые шаблоны. –

+0

Что возвращает 'GetLastError()' после BitBlt? –

+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, ЧЕРНОТА | WHITNESS); но его не работает ... может быть, я не предполагаю использовать bitblt ... – Alex

ответ

2

Raymond Chen дает complete example использование устройства отображения цвета в GDI для преобразования цветного изображения в оттенки серого с помощью BitBlt.

+0

+ еще один фрагмент кода в этом вопросе: http://stackoverflow.com/questions/8559341/how-to-convert-bitmap-to- полутоновый пиксель-интенсивность с помощью-GDI –