2011-04-07 83 views
4

我有一个奇怪的问题,将剪贴板图像保存为PNG。当使用prtscr或剪切工具截图时,它可以很好地处理Clipboard.GetImage()和PngBitmapEncoder。但是当从Paint复制图像并执行相同操作时,我会得到一个空的图像。至少在试图查看它时看起来是空的,尽管它似乎包含有效的PNG图像数据。当使用Jpeg编码器时,它工作正常。 PNG和Paint有什么问题?它与透明度有什么关系?.NET:将剪贴板图像保存到PNG失败

更新 澄清:我从剪贴板中成功地提取图像。我只是不能将它保存到使用PNGEncoder的光盘上,如果图像是从Paint首先复制的。尽管我可以使用JpegEncoder保存绘画剪贴板图像,但是我想使用PNG。

BitmapSource source = Clipboard.GetImage(); 
PngBitmapEncoder enc = new PngBitmapEncoder(); 
enc.Frames.Add(BitmapFrame.Create(source)); 
enc.Save(stream); 

以上代码生成一个图像文件与隐形内容,变成了完全黑或白取决于观众(来自,CTRL-C复制时,从描绘)。这导致我认为它与透明度有关...

+0

你能提供一个代码示例吗? – Arjen 2011-04-07 12:59:44

回答

3

您的问题看起来与我所描述的here非常相似......我建议的解决方案可能适合您。

+0

谢谢托马斯!我用你的ImageFromClipboardDib,它工作的很棒!我尝试了CopyPixels,并自己重新设置了alpha通道,但成功了。来自副本像素的数据仅为白色(255)。但是你的代码做到了! – 2011-04-07 15:06:14

+0

同样在这里。无法弄清楚为什么从MSPaint复制的图像是空的。托马斯的代码做了诀窍。 – 2015-04-04 14:38:48

0

我会首先尝试类似ClipSpy的东西来检查哪个应用程序将哪种类型的内容放在剪贴板上。