Die Verwendung Von Grafiken.DrawImage() Zeichnen, Bild Transparenz/Alpha-Kanal
Ich bin das kopieren von Bildern. (Meine eigentliche code ist die Bildgröße zu ändern, aber das ist nicht relevant für meine Frage.) Mein code sieht ungefähr so aus.
Image src = ...
using (Image dest = new Bitmap(width, height))
{
Graphics graph = Graphics.FromImage(dest);
graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
graph.DrawImage(src, 0, 0, width, height);
dest.Save(filename, saveFormat);
}
Scheint dies gut zu funktionieren, es sei denn src
geladen wird ein Bild mit Transparenzen (wie GIF) oder einen alpha-Kanal (PNG).
Wie bekomme ich DrawImage()
transfer Transparenzen/alpha-Kanal, um das neue Bild, und dann halten kann, wenn ich die Datei speichern?
Die Frage ist, was ist der Wert von
Dies scheint zu funktionieren für alpha-Kanäle, aber nicht für GIF-Transparenzen.
Also, was ist der Wert von
In diesem Fall ist es
Vielen Dank für eine schnelle Antwort. In der Zwischenzeit habe ich ein Artikel über GIF-Transparenz. Schauen Sie sich an: support.microsoft.com/kb/319061. Ich nehme an, dass im Grunde die Sie gerade haben, um das image der palette und legen Sie die Farbe, gespeichert in dem ersten index auf einem transparent.
saveFormat
variable? Es sollte PixelFormat.Format32bppArgb
(oder ein anderes format mit alpha-Kanal abgewickelt). Versuchen Sie auch: using (Image dest = new Bitmap(width, height, PixelFormat.Format32bppArgb))
.Dies scheint zu funktionieren für alpha-Kanäle, aber nicht für GIF-Transparenzen.
saveFormat
variieren je nach format der Eingabe-Datei. Wenn der input-Datei keine Unterstützung für alpha-Kanal, dann ist es sicher davon ausgehen, dass das Bild nicht enthalten alpha-Kanal Pixel.Also, was ist der Wert von
saveFormat
für GIF-Dateien dann:)?In diesem Fall ist es
ImageFormat.Gif
.Vielen Dank für eine schnelle Antwort. In der Zwischenzeit habe ich ein Artikel über GIF-Transparenz. Schauen Sie sich an: support.microsoft.com/kb/319061. Ich nehme an, dass im Grunde die Sie gerade haben, um das image der palette und legen Sie die Farbe, gespeichert in dem ersten index auf einem transparent.
InformationsquelleAutor Jonathan Wood | 2012-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ziemlich unklar, es gibt eine Menge Sie nicht sagen. Das größte Problem mit der Transparenz ist, dass Sie es nicht sehen können. Sie übersprungen ein paar Schritte, die Sie nicht explizit angeben, das pixel-format der neuen bitmap, die Sie nicht initialisieren und Sie hat nicht gesagt, was die Ausgabe-format, das Sie verwenden. Einige, die Transparenz nicht unterstützen. Machen wir also eine version, die macht es kristallklar. Aus einem PNG-Bild, das sieht aus wie das in paint.net:
Mit diesem code
Produziert dieses Bild:
Können Sie deutlich sehen, den blauen hintergrund, so dass die Transparenz gearbeitet.
erstellen Sie eine neue bitmap mit der alten bitmap die Breite und Höhe, und Ihre neue gewünschte format aus. Vorzugsweise in einem
using
- Anweisung, erstellen Sie ein Graphics-ObjektFromImage(
Ihre neue bitmap)
undDrawImage(
Ihre alten bitmap -)
.InformationsquelleAutor Hans Passant