Wie kann ich ein Bild aus der Zwischenablage, ohne dabei den alpha-Kanal .NET?
Ich bin versucht zu retten, eine kopierte Bild aus der Zwischenablage, aber es ist zu verlieren Ihren alpha-Kanal:
Image clipboardImage = Clipboard.GetImage();
string imagePath = Path.GetTempFileName();
clipboardImage.Save(imagePath);
Wenn ich kopieren Sie eine 32-bit-Bild aus PhotoShop oder IE/Firefox/Chrome und den oben stehenden code ausführen, der output verliert seine alpha-Kanal, sondern es ist gespeichert, die vor einem schwarzen hintergrund.
Das Bild ist als PNG gespeichert, die können einen Alphakanal enthalten.
Werden die richtigen Daten angezeigt werden in die Zwischenablage, weil das einfügen in andere Anwendungen (wie PhotoShop), bleibt der alpha-Kanal.
Kann jemand hat mich aus meinem Elend?
Vielen Dank im Voraus!
Update:
//outputs FALSE
Debug.WriteLine(Image.IsAlphaPixelFormat(Clipboard.GetImage().PixelFormat));
Den oben deutet darauf hin, dass die alpha-Daten verloren gehen, sobald man es aus der Zwischenablage. Vielleicht brauche ich, um es aus der Zwischenablage auf eine andere Weise?
- +1 nur für die ordnungsgemäße Verwendung der es-und seine
- gute Frage. wenn Sie das gelöst haben, vielleicht möchten Sie aktualisieren Sie Ihre Frage mit einem funktionierenden code, bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt
Clipboard.GetImage()
ist, versuchen Sie den AufrufClipboard.GetDataObject()
Dieser gibt ein IDataObject, die können Sie wiederum die Abfrage durch den Aufruf von
dataObject.GetFormats()
.GetFormats()
gibt den Typ unterstützte Formate die von der Zwischenablage-Objekt - kann es eine weitere genaue format, das Sie verwenden können, um die Daten zu extrahieren.Es könnte sein, wie dieser Artikel deutet darauf hin, dass das Clipboard-Objekt, das arbeiten in Win32, ist nur in der Lage zu verwalten bitmaps, die überhaupt nicht mit dem klar/teilweise transparent alpha-Kanal. Die OLE-Zwischenablage mehr in der Lage ist, wie es scheint:
Jedoch die netez war der beste Artikel, den ich gefunden zum Thema.
(Vorsicht, die ich noch nicht getestet, mich)
Das Bild wird als bitmap abgespeichert, wo die transparenten Pixel sichtbar sind, in die Zwischenablage kopieren, so verwenden Sie diesen code
Habe ich nur Formen von methode. Es ist nicht so schöne Lösung wie die Verwendung von
GetFormat
wie Kevin sagt uns aber seine mehr schnelle und Werke quiete gut.