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

C#将透明的PNG复制到剪贴板,c#,png,clipboard,C#,Png,Clipboard,我正在获取一个现有的PNG图像文件,该文件有一个透明部分,在将图像保存回磁盘之前在上面添加一些文本(使用Graphics.DrawString()) 我还想将图像保存到剪贴板。但是,当我尝试将结果图像粘贴到MS Paint中时,透明区域为浅灰色。但是,保存的文件将正确保留透明度 这就是我目前拥有的: //reads file into an System.Drawing.Image FileStream fs = new FileStream(fileLocation, FileMode.Ope

我正在获取一个现有的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);

回答我自己的问题


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

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

我在下面的回答中详细介绍了如何执行此操作(复制到和粘贴自):


这应该行得通。它在这里工作!位图bmp=新位图(“D:\\2RButtons.png”);Graphics g=Graphics.FromImage(bmp);g、 DrawString(“**”,新字体(“Tahoma”,6),System.Drawing.brush.Red,新点F(0,0));pictureBox1.Image=bmp;剪贴板。设置图像(bmp);pictureBox1.Image=Clipboard.GetImage();`而且一切都很好,特朗普性得到了保护……粘贴到油漆中也很好。(在win 8.1机器上)…您尝试过paint.net吗?我似乎记得在我的win7机器上复制透明图像。它不能正确粘贴到paint中,但我可以粘贴到paint.net和photoshop中。Windows剪贴板上可以同时有多个对象。现代应用程序只是使用不同于标准剪贴板“位图”格式的格式来作弊。常见的一种是
MemoryStream
,其中包含png图像的字节,作为数据类型“png”放在剪贴板上。