всем привет, пытаюсь получить из цветной картинки монохромное, но вот беда, получается красное, помогите найти ошибку, спасибо (hdc содержит 32-битный битмап) Код (Text): void _grayscale(HDC hDC,UINT hWidth,UINT hHeight) { DWORD hColor; UINT x; byte hRed,hGreen,hBlue; while(hHeight--) { x=hWidth; while(x--) { hColor=GetPixel(hDC,x,hHeight); hRed=(byte)(hColor & 0x0FF); hGreen=(byte)((hColor >> 8) & 0x0FF); hBlue=(byte)((hColor >> 16) & 0x0FF); //grayValue = 0.299*redValue + 0.587*greenValue + 0.114*blueValue // красное изображение, вместо монохромного hColor=(DWORD)(0.299*hRed + 0.587*hGreen + 0.114*hBlue); // также красное изображение, вместо монохромного //hColor=(hRed+hGreen+hBlue)/3; SetPixel(hDC,x,hHeight,hColor); } } }
ес-но оно у тебя красное будет, кроме красной составляющей кто остальные заполнять будет? К тому же юзать GetPixel - не сильно долго?
не сильно долго? masquer, как лучше тогда сделать? через dib? спасибо за ответы, понял в чём ошибка, всё-таки буду использовать не среднее арифметическое, а вот эту формулу: grayValue = 0.299*redValue + 0.587*greenValue + 0.114*blueValue, всё таки она более точное значение выдаёт