8

クリップボードからコピーした画像を保存しようとしていますが、アルファ チャネルが失われています。

Image clipboardImage = Clipboard.GetImage();
string imagePath = Path.GetTempFileName();
clipboardImage.Save(imagePath);

PhotoShop または IE/Firefox/Chrome から 32 ビット イメージをコピーして上記のコードを実行すると、出力のアルファ チャネルが失われ、代わりに黒い背景に対して保存されます。

画像は PNG として保存され、アルファ チャネルを含めることができます。

他のアプリケーション (PhotoShop など) に貼り付けてもアルファ チャネルが保持されるため、正しいデータがクリップボードにあるように見えます。

誰かが私を不幸から救ってくれますか?

前もって感謝します!

アップデート:

// outputs FALSE
Debug.WriteLine(Image.IsAlphaPixelFormat(Clipboard.GetImage().PixelFormat));

上記は、アルファ データがクリップボードから取り出されるとすぐに失われることを示唆しています。おそらく、他の方法でクリップボードから取り出す必要がありますか?

4

4 に答える 4

8

に電話する代わりに、電話Clipboard.GetImage()してみてくださいClipboard.GetDataObject()

これは IDataObject を返します。これは、 を呼び出して照会できますdataObject.GetFormats()GetFormats()Clipboard オブジェクトでサポートされている型形式を返します。データの抽出に使用できる、より正確な形式がサポートされている場合があります。

于 2009-06-15T22:45:55.607 に答える
3

この記事が示唆しているように、Win32 内で動作する Clipboard オブジェクトは、透明/部分的に透明なアルファ チャネルを備えていないビットマップしか管理できません。OLE クリップボードの方が機能が優れているようです。

しかし、netezは、このトピックに関して私が見つけた最高の記事でした。(私はこれを自分でテストしていないことに注意してください)

于 2009-06-15T22:57:02.817 に答える
0

私はFormsmethodeを使用しています。ケビンのように使用するような素晴らしい解決策GetFormatは私たちに教えてくれませんが、より迅速で静かに動作します。

  'Dim bm As BitmapSource = Clipboard.GetImage()'looses alpha channel
                'Dim bmS As New WriteableBitmap(bm)'does work but still without alpha information
                Dim bmF As System.Drawing.Bitmap = System.Windows.Forms.Clipboard.GetImage 'Get working image
                Dim bmS As BitmapSource = TB.Imaging.WPF.BitmapToWpfBitmapSource(bmF, Me) 'convert Bitmap into BitmapSource
                Me.Source = bmS
于 2011-10-25T13:53:01.707 に答える
0

画像はビットマップとして保存され、透明なピクセルがクリップボードに表示されるため、このコードを使用します

Bitmap clipboardImage = Clipboard.GetImage();
clipboardImage.MakeTransparent()
string imagePath = Path.GetTempFileName();
clipboardImage.Save(imagePath);
于 2009-06-15T22:23:24.600 に答える