Поделиться через


Использование таблицы переназначения цветов

Перекодировка — это процесс преобразования цветов в изображении в соответствии с таблицей перекодировки цветов. Таблица переназначения цвета представляет собой массив структур ColorMap. Каждая структура ColorMap в массиве содержит старый компонентColor и новый компонентColor.

Когда GDI+ рисует изображение, каждый пиксель изображения сравнивается с массивом старых цветов. Если цвет пикселя соответствует старому цвету, его цвет изменяется на соответствующий новый цвет. Изменение цветов происходит только во время отрисовки — значения цвета самого изображения (хранящиеся в объекте или растровом изображении) остаются неизменными.

Чтобы нарисовать перекартированное изображение, инициализируйте массив структур ColorMap . Передайте адрес этого массива в метод ImageAttributes::SetRemapTable объекта ImageAttributes, и затем передайте адрес объекта ImageAttributes методу DrawImage объекта Graphics.

В следующем примере создается объект изображенияиз файлаRemapInput.bmp. Код создает таблицу повторного отображения цвета, состоящую из одной структуры ColorMap. Элемент oldColor структуры ColorMap является красным, а элемент newColor — синим. Изображение рисуется один раз без перемаппинга и один раз с перемаппингом. Процесс перекодировки изменяет все красные пиксели на синие.

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);

На следующем рисунке показан исходный рисунок слева и перенаправленное изображение справа.

иллюстрации с двумя версиями многоцветного изображения; Красный регион в первой версии — синий в второй версии