Laden...

[gelöst] Bild transparent machen (Opacity!)

Erstellt von dr4g0n76 vor 15 Jahren Letzter Beitrag vor 14 Jahren 5.446 Views
dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 15 Jahren
[gelöst] Bild transparent machen (Opacity!)

Hallo, ich möchte von einem geladenen Bild (Image.FromFile) die KOMPLETTE Transparenz ändern, nicht nur die Hintergrundfarbe, wie z.B. bei Gif, bei dem eine Farbe für den Alphakanal zuständig ist.

Wie mache ich also ein Bitmap.Opacity = 50 oder Image.Opacity = 50?

Wenn keine andere Lösung bekannt ist, werde ich wohl die LowLevelGraphicsLibrary benutzen und für jeden Pixel dessen Transparenz ändern, bzw. vielleicht geht das ja auch schon für die Farbpalette (System.Drawing.Imaging.ColorPalette).

Oder habe ich bei der Suche im Forum tatsächlich die Lösung übersehen?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 15 Jahren

Ok, werde auch vielleicht das hier ausprobieren:

PNGs transparent machen und überlagern

opacity bei image

Ich werde aber trotzdem mal die Version mit meiner LowLevelGraphicsLibrary kreieren und dann hier posten.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.346 Beiträge seit 2008
vor 15 Jahren

Du kannst ja auf jedes einzelne Pixel zugreifen. Dann kanst du den Alfakanal einstellen.

Gruß pdelvo

42 Beiträge seit 2006
vor 15 Jahren

Hab mal dieses Snippet benutzt.
Funzt gut!

    public static Image SetOpacity(Image original, float opacity)
    {
      Bitmap temp = new Bitmap(original.Width, original.Height);
      Graphics g = Graphics.FromImage(temp);
      System.Drawing.Imaging.ColorMatrix cm = new System.Drawing.Imaging.ColorMatrix();
      cm.Matrix33 = opacity;

      System.Drawing.Imaging.ImageAttributes ia = new System.Drawing.Imaging.ImageAttributes();
      ia.SetColorMatrix(cm, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);
      g.DrawImage(original, new Rectangle(0, 0, temp.Width, temp.Height), 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, ia);
      g.Dispose();
      return temp;
    }

(Quelle: http://dotnet-snippets.de)

~ There's no knowledge that is not power~

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 14 Jahren

Hat funktioniert.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.