簡體   English   中英

如何在不丟失.NET中的alpha通道的情況下從剪貼板中獲取圖像?

[英]How can I get an image out of the clipboard without losing the alpha channel in .NET?

我正在嘗試從剪貼板保存復制的圖像,但它正在丟失其alpha通道:

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

如果我從PhotoShop或IE / Firefox / Chrome復制32位圖像並運行上面的代碼,則輸出會丟失其Alpha通道,而是在黑色背景下保存。

圖像保存為PNG,可以包含Alpha通道。

正確的數據似乎在剪貼板中,因為粘貼到其他應用程序(例如PhotoShop)會保留alpha通道。

任何人都可以讓我擺脫痛苦嗎?

提前致謝!

更新:

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

以上表明,一旦從剪貼板中取出,alpha數據就會丟失。 也許我需要以其他方式將其從剪貼板中刪除?

而不是調用Clipboard.GetImage() ,嘗試調用Clipboard.GetDataObject()

這將返回一個IDataObject,您可以通過調用dataObject.GetFormats()來查詢它。 GetFormats()返回Clipboard對象支持的類型格式 - 可以使用更精確的格式來提取數據。

可能像本文建議的那樣,在Win32中工作的Clipboard對象只能管理位圖,而位圖不具有透明/部分透明的alpha通道。 OLE剪貼板更強大,似乎:

然而, netez是我在這個主題上找到的最好的文章。 (小心我自己沒有測試過)

我只是使用Forms方法。 它不像使用像凱文這樣的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

圖像被保存為位圖,透明像素在剪貼板上可見,因此請使用此代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM