Использование таблицы преобразования цветов
Переназначение — это процесс преобразования цветов на изображении в соответствии с таблицей переназначения цветов. Таблица переназначения цветов представляет собой массив структур ColorMap . Каждая структура ColorMap в массиве содержит элемент oldColor и новый элементColor .
Когда GDI+ рисует изображение, каждый пиксель изображения сравнивается с массивом старых цветов. Если цвет пикселя соответствует старому цвету, его цвет меняется на соответствующий новый цвет. Цвета изменяются только для отрисовки— значения цвета самого изображения (хранящегося в объекте Image или Bitmap ) не изменяются.
Чтобы нарисовать повторно сопоставленное изображение, инициализируйте массив структур ColorMap . Передайте адрес этого массива методу ImageAttributes::SetRemapTable объекта ImageAttributes , а затем передайте адрес объекта ImageAttributes методу DrawImage Methods объекта Graphics .
В следующем примере создается объект Image из файла RemapInput.bmp. Код создает таблицу переназначения цветов, состоящую из одной структуры ColorMap . Элемент oldColor структуры ColorMap имеет красный цвет, а новый элементColor — синий. Изображение рисуется один раз без переназначения и один раз с переназначением. В процессе переназначения все красные пиксели меняются на синие.
Image image(L"RemapInput.bmp");
ImageAttributes imageAttributes;
UINT width = image.GetWidth();
UINT height = image.GetHeight();
ColorMap colorMap[1];
colorMap[0].oldColor = Color(255, 255, 0, 0); // opaque red
colorMap[0].newColor = Color(255, 0, 0, 255); // opaque blue
imageAttributes.SetRemapTable(1, colorMap, ColorAdjustTypeBitmap);
graphics.DrawImage(&image, 10, 10, width, height);
graphics.DrawImage(
&image,
Rect(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel,
&imageAttributes);
На следующем рисунке показано исходное изображение слева и переназначенное изображение справа.