Wie kann ich ein Bild aus der Zwischenablage erhalten, ohne den Alpha-Kanal in .NET zu verlieren?

8

Ich versuche, ein kopiertes Bild aus der Zwischenablage zu speichern, aber es verliert seinen Alphakanal:

%Vor%

Wenn ich ein 32-Bit-Bild aus PhotoShop oder IE / Firefox / Chrome kopiere und den obigen Code ausführe, verliert die Ausgabe ihren Alpha-Kanal, stattdessen wird sie vor einem schwarzen Hintergrund gespeichert.

Das Bild wird als PNG gespeichert, das einen Alpha-Kanal enthalten kann.

Die korrekten Daten befinden sich anscheinend in der Zwischenablage, da beim Einfügen in andere Anwendungen (z. B. PhotoShop) der Alphakanal beibehalten wird.

Kann mich jemand aus meinem Elend befreien?

Vielen Dank im Voraus!

Aktualisierung:

%Vor%

Das obige deutet darauf hin, dass die Alpha-Daten verloren gehen, sobald sie aus der Zwischenablage genommen werden. Vielleicht muss ich es auf andere Weise aus dem Klemmbrett holen?

    
Jaffa The Cake 15.06.2009, 22:05
quelle

4 Antworten

7

Rufen Sie Clipboard.GetImage()

auf, anstatt Clipboard.GetDataObject() aufzurufen

Dies gibt ein IDataObject zurück, das Sie wiederum durch Aufrufen von dataObject.GetFormats() abfragen können. GetFormats() gibt die vom Zwischenablageobjekt unterstützten Typformate zurück - möglicherweise wird ein genaueres Format unterstützt, das Sie zum Extrahieren der Daten verwenden können.

    
Kevin Pullin 15.06.2009, 22:45
quelle
3

Es könnte sein, dass dieser Artikel vorschlägt, dass das Clipboard-Objekt, das in Win32 arbeitet, ist nur in der Lage, Bitmaps zu verwalten, die nicht den transparenten / teilweise transparenten Alphakanal aufweisen. Die OLE-Zwischenablage ist besser geeignet, so scheint es:

Der netez war jedoch der beste Artikel, den ich zu diesem Thema gefunden habe. (Vorsicht, ich habe das selbst nicht getestet)

    
Henrik 15.06.2009 22:57
quelle
0

Das Bild wird als Bitmap gespeichert, wobei die transparenten Pixel in der Zwischenablage sichtbar sind, verwenden Sie also diesen Code

%Vor%     
Jim 15.06.2009 22:23
quelle
0

Ich verwende nur die Forms-Methode. Es ist nicht so eine nette Lösung wie die Verwendung von GetFormat , wie Kevin uns sagt, aber es ist schneller und funktioniert überhaupt nicht gut.

%Vor%     
Nasenbaer 25.10.2011 13:53
quelle

Tags und Links