2014-06-19 145 views
1

我正在使用一個現有的PNG圖像文件,它具有透明部分,在將圖像保存回磁盤之前在頂部添加一些文本(使用Graphics.DrawString())。C#複製透明PNG到剪貼板

我想也保存圖像到剪貼板。但是,當我嘗試將生成的圖像粘貼到MS Paint中時,透明區域呈淺灰色。然而,保存的文件保持正確的透明度。

這是我目前有:

//reads file into an System.Drawing.Image 
FileStream fs = new FileStream(fileLocation, FileMode.Open, FileAccess.Read); 
Image image = Image.FromStream(fs); 
fs.Close(); 

//add text to image via System.Drawing.Graphics 
Bitmap myBitmap = new Bitmap(image); 
Graphics g = Graphics.FromImage(myBitmap); 
g.DrawString(textToAdd, new Font("Tahoma", 14), System.Drawing.Brushes.Black, new PointF(0, 0)); 

//save modified image back to disk (transparency works) 
myBitmap.Save(fileLocation, System.Drawing.Imaging.ImageFormat.Png); 

//Copy to clipboard (transparent areas are now gray) 
System.Windows.Forms.Clipboard.SetImage(myBitmap); 
+0

這應該工作。它在這裏工作!位圖bmp =新位圖(「D:\\ 2RButtons.png」); Graphics g = Graphics.FromImage(bmp); g.DrawString(「**」,new Font(「Tahoma」,6),System.Drawing.Brushes.Red,new PointF(0,0)); pictureBox1.Image = bmp; Clipboard.SetImage(bmp); pictureBox1.Image = Clipboard.GetImage();''一切都很好,透明度被保留。 – TaW

+0

..保存到Paint中也可以正常工作。 (在贏8.1機器上).. – TaW

回答

0

回答我的問題。

我在我的當前環境(Windows 7)中無法正常工作,因爲Win7不支持其剪貼板中的透明度。但它在Windows 8環境中工作。

+0

你試過了paint.net嗎?我似乎記得在我的win7機器上覆制透明圖像。它不能正確地粘貼到油漆中,但我可以將其放入paint.net和photoshop。 – Matches

+0

Windows剪貼板可以同時擁有多個對象。現代應用程序通過簡單地使用不同格式而不僅僅是標準剪貼板「位圖」格式來欺騙。一個常見的方法是包含一個PNG圖像字節的MemoryStream,並以數據類型「PNG」的形式放在剪貼板上。 – Nyerguds

1

默認情況下,Windows剪貼板不支持透明度,但您可以將剪貼板中的內容放在多種類型中,以確保大多數應用程序能夠找到可供使用的某種類型。一般來說,除了普通的非透明剪貼板位圖格式之外,如果您將圖像以PNG和DIB格式放在剪貼板上,大多數應用程序將能夠至少使用其中一個來以支持的格式獲取圖像透明。

我詳細介紹如何做到這一點(包括複製並粘貼從)在這個答案:

https://stackoverflow.com/a/46424800/395685