C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1581字,纯文字阅读大概需要3分钟。
内容图文
![C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性](/upload/InfoBanner/zyjiaocheng/946/5103bebfffb34259bbca7092c39f3b5f.jpg)
我的任务是捕获图像,将其复制到剪贴板,然后将其粘贴到下面的应用程序中.我必须能够支持几乎任何富文本字段,并且它必须保留透明性.我当前的解决方案首先呈现白色背景.这是我的代码:
RenderTargetBitmap包含要复制为.PNG的图像
public static void CopyImageToClipboard(RenderTargetBitmap b)
{
MemoryStream stream = new MemoryStream();
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(b));
encoder.Save(stream);
Bitmap bmp = new Bitmap(stream);
Bitmap blank = new Bitmap(Convert.ToInt32(b.Width), Convert.ToInt32(b.Height));
Graphics g = Graphics.FromImage(blank);
g.Clear(System.Drawing.Color.White);
System.Drawing.Image img = System.Drawing.Image.FromStream(stream);
g.DrawImage(img, 0, 0, Convert.ToInt32(b.Width), Convert.ToInt32(b.Height));
Bitmap tempImage = new Bitmap(blank);
blank.Dispose();
img.Dispose();
bmp = new Bitmap(tempImage);
tempImage.Dispose();
System.Windows.Forms.Clipboard.SetImage(bmp);
stream.Dispose();
}
解决方法:
假设随机选择一种颜色作为背景
var background = Color.FromArgb(1, 255, 1, 255);
清除背景:
g.Clear(background); // instead of System.Drawing.Color.White
然后使该颜色透明:
Bitmap tempImage = new Bitmap(blank);
tempImage.MakeTransparent(background);
请注意,默认的透明颜色也很好用,不需要选择魔术色(检查是否需要Clear()背景,可能是-我没有检查-默认位图背景):
g.Clear(Color.Transparent);
// ...
tempImage.MakeTransparent();
编辑一些较旧的RTF控件版本无法处理透明度,因此您无能为力(AFAIK).半透明的解决方法(如果无法检测到粘贴目标的控件类并读取其背景颜色)是使用Color.FromArgb(254,255,255,255).不支持透明的白色,并且由于完全透明(由于MakeTransparent())而完全透明.
内容总结
以上是互联网集市为您收集整理的C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性全部内容,希望文章能够帮你解决C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。