Freigeben über


Festlegen der Alphawerte einzelner Pixel

Das Thema Verwenden einer Farbmatrix zum Festlegen von Alphawerten in Bildern zeigt eine zerstörungsfreie Methode zum Ändern der Alphawerte eines Bilds. Das Beispiel in diesem Thema rendert ein Bild halbtransparent, aber die Pixeldaten in der Bitmap werden nicht geändert. Die Alphawerte werden nur während des Renderings geändert.

Das folgende Beispiel zeigt, wie Sie die Alphawerte einzelner Pixel ändern. Der Code im Beispiel ändert tatsächlich die Alphainformationen in einem Bitmap-Objekt . Der Ansatz ist viel langsamer als die Verwendung einer Farbmatrix und eines ImageAttributes-Objekts , gibt Ihnen jedoch die Kontrolle über die einzelnen Pixel in der Bitmap.

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

Die folgende Abbildung zeigt das resultierende Bild.

Abbildung eines Bilds, das von links nach rechts über ein schwarzes Rechteck undurchsichtiger wird

Im vorherigen Codebeispiel werden geschachtelte Schleifen verwendet, um den Alphawert jedes Pixels in der Bitmap zu ändern. Bitmap ::GetPixel ruft für jedes Pixel die vorhandene Farbe ab, Color::SetValue erstellt eine temporäre Farbe, die den neuen Alphawert enthält, und bitmap ::SetPixel legt dann die neue Farbe fest. Der Alphawert wird basierend auf der Spalte der Bitmap festgelegt. In der ersten Spalte ist alpha auf 0 festgelegt. In der letzten Spalte ist alpha auf 255 festgelegt. So geht das resultierende Bild von vollständig transparent (am linken Rand) zu vollständig undurchsichtig (am rechten Rand).

Bitmap::GetPixel und Bitmap::SetPixel geben Ihnen die Kontrolle über die einzelnen Pixelwerte. Die Verwendung von Bitmap::GetPixel und Bitmap::SetPixel ist jedoch nicht annähernd so schnell wie die Verwendung der ImageAttributes-Klasse und der ColorMatrix-Struktur .