Nastavení alfa hodnot jednotlivých pixelů
Téma Použití barevné matice k nastavení alfa hodnot v obrázcích ukazuje nedestruktivní metodu pro změnu alfa hodnot obrázku. Příklad v tomto tématu vykreslí obrázek poloprůhledně, ale pixelová data v rastrovém obrázku se nezmění. Alfa hodnoty se mění pouze během vykreslování.
Následující příklad ukazuje, jak změnit alfa hodnoty jednotlivých pixelů. Kód v příkladu skutečně změní alfa informace v objektu Bitmap. Přístup je mnohem pomalejší než použití barevné matice a ImageAttributes objekt, ale poskytuje kontrolu nad jednotlivými pixely v rastrovém obrázku.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
Color color, colorTemp;
for(INT iRow = 0; iRow < iHeight; iRow++)
{
for(INT iColumn = 0; iColumn < iWidth; iColumn++)
{
bitmap.GetPixel(iColumn, iRow, &color);
colorTemp.SetValue(color.MakeARGB(
(BYTE)(255 * iColumn / iWidth),
color.GetRed(),
color.GetGreen(),
color.GetBlue()));
bitmap.SetPixel(iColumn, iRow, colorTemp);
}
}
// First draw a wide black line.
Pen pen(Color(255, 0, 0, 0), 25);
graphics.DrawLine(&pen, 10, 35, 200, 35);
// Now draw the modified bitmap.
graphics.DrawImage(&bitmap, 30, 0, iWidth, iHeight);
Následující obrázek znázorňuje výsledný obrázek.
Předchozí příklad kódu používá vnořené smyčky ke změně alfa hodnoty každého pixelu v rastrovém obrázku. Pro každý pixel Bitmap::GetPixel získá existující barvu, Color::SetValue vytvoří dočasnou barvu, která obsahuje novou alfa hodnotu, a pak Bitmap::SetPixel nastaví novou barvu. Alfa hodnota je nastavena na základě sloupce rastrového obrázku. V prvním sloupci je alfa nastavená na 0. V posledním sloupci je alfa nastavená na 255. Výsledný obrázek je tedy úplně průhledný (na levém okraji) až po úplně neprůhledný (na pravém okraji).
Bitmap::GetPixel a Bitmap::SetPixel můžete určit hodnoty jednotlivých pixelů. Použití Bitmap::GetPixel a Bitmap::SetPixel není tak rychlé jako použití třídy ImageAttributes a struktury ColorMatrix.