C#将具有透明度的PNG复制到剪贴板

时间:2014-06-19 22:24:55

标签: c# png clipboard

我正在拍摄一个透明部分的现有PNG图像文件,在将图像保存回磁盘之前,在顶部添加一些文本(使用Graphics.DrawString())。

我还想将图像保存到剪贴板。但是,当我尝试将生成的图像粘贴到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);

2 个答案:

答案 0 :(得分:1)

默认情况下,Windows剪贴板不支持透明度,但您可以将多种类型的内容放在剪贴板上,以确保大多数应用程序在其中找到可以使用的某些类型。通常,除了正常的非透明剪贴板位图格式之外,如果您将图像以PNG和DIB格式放在剪贴板上,大多数应用程序将能够使用其中至少一个以其支持的格式获取图像。透明。

我在这个答案中详细说明了如何做到这一点(复制和粘贴):

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

答案 1 :(得分:0)

回答我自己的问题。

我所拥有的功能在当前环境(Windows 7)中不起作用,因为Win7不支持其剪贴板中的透明度。但它确实可以在Windows 8环境中运行。