Show / Hide Table of Contents

Масштабирование цветов с применением преобразований

Преобразование масштабирования умножает одно или несколько из четырех компонентов цвета по номеру. В следующей таблице приведены элементы матрицы цветов, представляющих масштабирования.

Масштабируемый компонент Элемент матрицы
Красный [0][0]
Зеленый [1][1]
Синий [2][2]
Коэффициент альфа [3][3]

Масштабирование одного цвета

В следующем примере создается Image объекта из файла ColorBars2.bmp. Затем код масштабирует синего компонента каждого пикселя изображения с коэффициентом 2. Исходное изображение отображается вместе с преобразованные изображения.

Image image = new Bitmap("ColorBars2.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = { 
   new float[] {1,  0,  0,  0, 0},
   new float[] {0,  1,  0,  0, 0},
   new float[] {0,  0,  2,  0, 0},
   new float[] {0,  0,  0,  1, 0},
   new float[] {0, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10, width, height);

e.Graphics.DrawImage(
   image,
   new Rectangle(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);

Ниже показан исходное изображение в левой части и масштабированное изображение справа:

Снимок экрана, сравнивает исходные и масштабированное цвета.

Ниже перечислены эти векторы четырех полос до и после масштабирования. Обратите внимание, что синий компонент цвета четвертой полосы изменился с 0,8 на 0,6. Это потому, что GDI+ сохраняет только дробная часть результата. Например (2)(0,8) = 1,6, а дробная часть параметра 1.6 равно 0,6. Сохранение только дробной части гарантирует, что результат всегда находится в интервале [0, 1].

До преобразования Масштабирование
(0.4, 0.4, 0.4, 1) (0.4, 0.4, 0.8, 1)
(0.4, 0.2, 0.2, 1) (0.4, 0.2, 0.4, 1)
(0.2, 0.4, 0.2, 1) (0.2, 0.4, 0.4, 1)
(0.4, 0.4, 0.8, 1) (0.4, 0.4, 0.6, 1)

Масштабирование нескольких цветов

В следующем примере создается Image объекта из файла ColorBars2.bmp. Затем код масштабирует красного, зеленого и синего компонентов каждого пикселя в изображении. Красные компоненты уменьшаются на 25 процентов, зеленые компоненты уменьшаются на 35 процентов и синий компоненты уменьшаются на 50 процентов.

Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = { 
   new float[] {.75F,  0,  0,  0, 0},
   new float[] {0,  .65F,  0,  0, 0},
   new float[] {0,  0,  .5F,  0, 0},
   new float[] {0,  0,  0,  1F, 0},
   new float[] {0, 0, 0, 0, 1F}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10, width, height);

e.Graphics.DrawImage(
   image,
   new Rectangle(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);

Ниже показан исходное изображение в левой части и масштабированное изображение справа:

Снимок экрана, сравнивает исходные и масштабированное цвета.

Ниже перечислены эти векторы четырех полос до и после красного, зеленого и синего масштабирования.

До преобразования Масштабирование
(0.6, 0.6, 0.6, 1) (0.45, 0.39, 0.3, 1)
(0, 1, 1, 1) (0, 0.65, 0.5, 1)
(1, 1, 0, 1) (0.75, 0.65, 0, 1)
(1, 0, 1, 1) (0.75, 0, 0.5, 1)

См. также

  • ColorMatrix
  • ImageAttributes
  • Объекты Graphics и Drawing в Windows Forms
  • Перекрашивание изображений
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX