Sdílet prostřednictvím


Postupy: Překlad barev obrázků

Překlad přidá hodnotu k jedné nebo více čtyř barevných komponentám. Položky barevné matice, které představují překlady, jsou uvedeny v následující tabulce.

Komponenta, která se má přeložit Položka matice
Červený [4][0]
Zelený [4][1]
Modrý [4][2]
Alfa [4][3]

Příklad

Následující příklad vytvoří Image objekt ze souboru ColorBars.bmp. Pak kód přidá 0,75 k červené komponentě každého pixelu na obrázku. Původní obrázek je nakreslený vedle transformovaného obrázku.

Následující obrázek znázorňuje původní obrázek vlevo a transformovaný obrázek vpravo:

Snímek obrazovky s původním a transformovaným obrázkem

Následující tabulka uvádí barevné vektory pro čtyři pruhy před a za červeným překladem. Všimněte si, že protože maximální hodnota pro barevnou komponentu je 1, červená komponenta ve druhém řádku se nezmění. (Podobně je minimální hodnota pro barevnou komponentu 0.)

Původní Přeloženo
Černá (0, 0, 0, 1) (0.75, 0, 0, 1)
Červená (1, 0, 0, 1) (1, 0, 0, 1)
Zelená (0, 1, 0, 1) (0.75, 1, 0, 1)
Modrá (0, 0, 1, 1) (0.75, 0, 1, 1)
Image image = new Bitmap("ColorBars.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,  1,  0, 0},
   new float[] {0,  0,  0,  1, 0},
   new float[] {.75f, 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);
Dim image As New Bitmap("ColorBars.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height

Dim colorMatrixElements As Single()() = { _
   New Single() {1, 0, 0, 0, 0}, _
   New Single() {0, 1, 0, 0, 0}, _
   New Single() {0, 0, 1, 0, 0}, _
   New Single() {0, 0, 0, 1, 0}, _
   New Single() {0.75F, 0, 0, 0, 1}}

Dim colorMatrix As New ColorMatrix(colorMatrixElements)

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

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

' Pass in the destination rectangle (2nd argument), the upper-left corner 
' (3rd and 4th arguments), width (5th argument),  and height (6th 
' argument) of the source rectangle.
e.Graphics.DrawImage( _
   image, _
   New Rectangle(150, 10, width, height), _
   0, 0, _
   width, _
   height, _
   GraphicsUnit.Pixel, _
   imageAttributes)

Kompilace kódu

Předchozí příklad je určen pro použití s Windows Forms a vyžaduje PaintEventArgse, což je parametr obslužné rutiny události Paint. Nahraďte ColorBars.bmp názvem a cestou k souboru obrázku, které jsou platné ve vašem systému.

Viz také