Sdílet prostřednictvím


Použití barevné matice k nastavení alfa hodnot v obrázcích

Třída Bitmap (která dědí z třídy Image) a třídy ImageAttributes poskytují funkce pro získání a nastavení hodnot pixelů. Pomocí třídy ImageAttributes můžete upravit alfa hodnoty pro celý obrázek, nebo můžete použít metodu SetPixel třídy Bitmap k úpravě hodnot jednotlivých pixelů. Další informace o nastavení jednotlivých hodnot pixelů naleznete v tématu Nastavení alfa hodnot jednotlivých pixelů.

Následující příklad nakreslí širokou černou čáru a pak zobrazí neprůhlásný obrázek, který pokrývá část této čáry.

Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw an image that covers part of the black line.
graphics.DrawImage(&bitmap,
   Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));

Následující obrázek znázorňuje výsledný obrázek, který je nakreslen na (30, 0). Všimněte si, že široká černá čára neprosvítá skrz obrázek.

obrázek znázorňující neprůhledný obrázek překrývající tenký, široký a černý obdélník

Třída ImageAttributes má mnoho vlastností, které můžete použít k úpravě obrázků během vykreslování. V následujícím příkladu se objekt ImageAttributes používá k nastavení všech alfa hodnot na 80 procent jejich hodnot. To se provádí inicializací barevné matice a nastavením hodnoty alfa měřítka v matici na hodnotu 0,8. Adresa barevné matice je předána k metodě ImageAttributes::SetColorMatrix objektu ImageAttributes, a adresa objektu ImageAttributes je předána k metodě DrawImage objektu Graphics.

// Create a Bitmap object and load it with the texture image.
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// Initialize the color matrix.
// Notice the value 0.8 in row 4, column 4.
ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt;
imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw the semitransparent bitmap image.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
graphics.DrawImage(
   &bitmap, 
   Rect(30, 0, iWidth, iHeight),  // Destination rectangle
   0,                             // Source rectangle X 
   0,                             // Source rectangle Y
   iWidth,                        // Source rectangle width
   iHeight,                       // Source rectangle height
   UnitPixel, 
   &imageAtt);

Při vykreslování se alfa hodnoty v rastrovém obrázku převedou na 80 procent toho, co byly. Výsledkem je obrázek, který se prolne s pozadím. Jak ukazuje následující obrázek, rastrový obrázek vypadá průhledně; můžete vidět plnou černou čáru.

obrázek podobný předchozímu obrázku, ale obrázek je poloprůhledný

Tam, kde je obrázek nad bílou částí pozadí, se obrázek prolnul s bílou barvou. Tam, kde obrázek kříží černou čáru, se obrázek spojí s barvou černou.