【问题标题】:C# Copying PNG with transparency to clipboardC#将具有透明度的PNG复制到剪贴板
【发布时间】:2014-06-19 22:24:55
【问题描述】:

我正在使用具有透明部分的现有 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);

【问题讨论】:

  • 这应该可以。它在这里工作!位图 bmp = new Bitmap("D:\\2RButtons.png");图形 g = Graphics.FromImage(bmp); g.DrawString("**", new Font("Tahoma", 6), System.Drawing.Brushes.Red, new PointF(0, 0));图片框1.Image = bmp; Clipboard.SetImage(bmp); pictureBox1.Image = Clipboard.GetImage();``一切都很好,透明度得以保留。
  • ..粘贴到 Paint 中也可以正常工作。 (在 win 8.1 机器上)..

标签: c# png clipboard


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    回答我自己的问题。

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

    【讨论】:

    • 你试过paint.net吗?我似乎记得在我的win7机器上复制透明图像。它不能正确粘贴到油漆中,但我可以粘贴到 paint.net 和 photoshop。
    • Windows 剪贴板可以同时包含多个对象。现代应用程序通过简单地使用与标准剪贴板“位图”格式不同的格式来作弊。一个常见的是 MemoryStream 包含 png 图像的字节,作为数据类型“PNG”放在剪贴板上。
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2013-01-07
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多