c # Bitmap.Save Transparenz wird nicht in PNG gespeichert

8

Ich versuche, eine Bitmap-Klasse mit Transparenz als PNG-Datei mit Transparenz zu speichern. Ich habe kein Glück.

Die Bitmap hat Transparenz, sie speichert nicht mit Transparenz.

das mache ich gerade

Bitmap-Einrichtung

%Vor%

speichern

%Vor%

Ich habe auch versucht, die Datei mit einem Filestream zu speichern, und das machte keinen Unterschied.

Wenn das Bild in einer Bildbox ist, existiert die Transparenz, aber wenn ich es speichere, bekomme ich nur einen schwarzen Hintergrund.

Ich möchte wirklich keinen Code von Drittanbietern verwenden, sie haben einen Weg gefunden, es zu tun, ich möchte auch.

danke.

    
Kelly Elton 05.02.2010, 08:00
quelle

10 Antworten

0

Ich nahm an, dass der FilterIndex eines Dialogfelds bei 0 gestartet wurde, aber tatsächlich bei 1 beginnt. Daher wurden meine Bilder als Gifs mit Alpha-Transparenz gespeichert, und GIF unterstützt keine Alpha-Transparenz. Also mein Problem war eigentlich mit dem Dialogfeld.

    
Kelly Elton 06.10.2011, 05:46
quelle
6

Sind Sie sicher, dass das Pixelformat der Bitmap System.Drawing.Imaging.PixelFormat.Format32bppArgb ist? Ich bin gerade über diese Frage gestolpert, weil ich das gleiche Problem hatte, aber es war, weil ich ein Bild geladen hatte, das keine Alpha-Komponente zu seinem Pixelformat hatte. Ich habe

gemacht %Vor%

und es hat das PNG richtig mit der Alpha-Komponente gespeichert.

Wenn Sie MakeTransparent () verwenden, müssen Sie außerdem sicherstellen, dass die Farbe, die Sie transparent machen, in Ihrem Bild vorhanden ist.

    
brian 05.10.2011 18:52
quelle
3

Der Grund ist, dass die Klasse Bitmap nicht mit Transparenz arbeitet.

Sie müssen Bitmap auf Image anwenden.

%Vor%     
Anton 06.06.2012 11:08
quelle
2

Schon eine Weile her, seit ich Bildbearbeitung / -speicherung gemacht habe, aber wenn ich mich recht erinnere, sind PNGs anders als die meisten. Ich denke, Sie müssen einen tatsächlichen FileStream verwenden.

EDIT: Ah, fand ein Beispiel hier

%Vor%

EDIT2: Nach mehr Recherche dazu denke ich, dass der Zwischenschritt nur unter bestimmten Umständen erforderlich ist.

Es ist auch möglich, dass Sie, weil Sie "MakeTransparent" verwenden, ein indiziertes Alpha abfangen, aber versuchen, basierend auf dem tatsächlichen Alpha-Wert jedes Pixels zu speichern. Sie könnten versuchen, die Alpha-Werte des Bildes tatsächlich einzustellen.

    
McAden 05.02.2010 08:09
quelle
1
%Vor%     
mxmissile 05.02.2010 08:11
quelle
1

Haben Sie versucht, die Bitmap.MakeTransparent () -Methode zu verwenden?

    
Aryabhatta 05.02.2010 08:11
quelle
1

Ich wollte nur alle daran erinnern, dass MakeTransparent, wie meine vielen Personen hier vorgeschlagen haben, nur die spezifische Farbe transparent macht . Der Alphakanal des Argb-Bildes wird nicht berücksichtigt. Ein Pixel mit einem Alpha-Wert von 100, zum Beispiel, wenn es nicht mit der Farbe übereinstimmt, die MakeTransparent zur Verfügung gestellt wird, hat keine teilweise Transparenz.

    
Greg 03.02.2016 15:11
quelle
0

Speichern als PNG ERFORDERT suchbaren Stream wie FileStream oder MemoryStream. Wenn Sie in einer von dort speichern und von dort bekommen, gibt es keine GDI + Ausnahme oder ähnliches. Hoffe, das hilft.

    
Vlado 28.05.2010 19:17
quelle
0

Portable Network Graphhics (.png) unterstützt Transparenzen, also beim Speichern des Bildformats in ImageFormat.Png.

%Vor%

Wenn also das Speichern in anderen Formaten wie JPEG ... die Transparenz verliert. Hoffe es hilft.

    
Hari 03.04.2015 01:42
quelle
0

Obwohl die Frage sehr alt ist, aber hier funktioniert der Code für mich.

%Vor%     
Gaurav Lal 11.07.2016 14:27
quelle

Tags und Links