Первая картинка связывается с hdcMemS, вторая - с hdcMemD. При обработке изображения в цикле по строкам и столбцам картинки для каждой точки выполняются действия, перечисленные в следующем списке:

1. Код цвета читается функцией Cvet = GetPixel (hdcMemS. i, j).

2. Цвет разделяется на компоненты, которые умножаются на коэффициенты, определяющие степень проявления картинки.

Работа с растровыми изображениями

3. Результаты умножения ограничиваются диапазоном (0, 255).

4. Из составляющих цвета формируется общий код, который заносится в обработанную картинку функцией Set Pi xel V().

Код обработки и отображения картинки приведен в листинге 17.4.

Листинг 17.4

void GDIBitMapCHDC hdcMemS.HDC hdcMemD.
double kB. double kG.double kR. int x.int y)
{

int Cvet; //Общий цвет.

C0L0RREF R.G.B; //Компоненты цвета.

//Для организации перебора точек функции нужны высота и ширина картинки. //Эта информация получается из дескриптора битовой карты. Чтобы не вводить //дополнительных параметров и глобальных переменных, дескриптор извлекается //из контекста

HBITMAP BitMapS - (HBITMAP)GetCurrentObject(hdcMemS.OBJ_BITMAP): //Полученный дескриптор BitMapS позволяет занести требуемые данные //в структуру BITMAP BITMAP bitmap;

GetObject(Bi tMapS.s i zeof(ВITMAP).&bi tmap):

for(int i - 0:i<bitmap.bmWidth;i++) //Вложенным циклом по строкам и столбцам for(int j - 0;j<bitmap.bmHeight://просматриваются все точки картинки {

Cvet - GetPixel(hdcMemS.i.j); //Общий цвет.

R - (int)((Cvet&OxFF)*kR); //Красная составляющая.

R - R<256?R>0?R:0:255; //Ограничение R диапазоном (0.255)

G - (int)((Cvet&0xFF00)*kG):
G - G<0xl0000?G>0xFF?G&0xFF00:0:0xFF00;

В - (int)((Cvet&0xFF0000)*kB): В - B<0xl000000?B&0xFF0000:OxFFOOOO: //Зеленый G и синий В компоненты цвета умножаются и ограничиваются без //сдвига в младший байт

Cvet-R|G|В: Объединение трех компонентов в результирующий цвет. // if(!Cvet)Cvet - OxFFFFFF; Демонстрационная картинка была изображена //на черном фоне. Данный оператор превращает черный фон в белый для //отображения в печатном виде


⇐ Предыдущая| |Следующая ⇒