2009-06-15 41 views
8

我試圖從剪貼板中保存複製的圖像,但它失去了其Alpha通道:如何在不丟失.NET中的alpha通道的情況下從剪貼板中獲取圖像?

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

如果我複製從Photoshop或IE /火狐/ Chrome中的32位圖像和運行上面的代碼,輸出失去了它的alpha通道,相反它保存在黑色背景下。

圖像保存爲PNG,可以包含alpha通道。

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

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

在此先感謝!

更新:

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

以上表明,隨着它取出剪貼板中的阿爾法數據一旦丟失。也許我需要用其他方式從剪貼板中取出它?

+3

+1只是爲了正確使用它和它的 – Kevin 2009-06-15 23:20:54

+0

好問題。如果你已經解決了,也許你想用一個有效的代碼來更新你的問題,好嗎? – Nasenbaer 2011-10-25 13:54:18

回答

7

與其說Clipboard.GetImage()的,嘗試調用Clipboard.GetDataObject()

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

0

圖像被保存爲位圖,其中的透明像素剪貼板上可見,所以使用這個代碼

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

MakeTransparent只會使單一顏色透明,alpha信息在該行之前丟失:( – 2009-06-15 22:33:42

0

我只是使用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 
相關問題