【发布时间】:2017-05-31 14:25:07
【问题描述】:
这是一个奇怪的问题: 我最近将我的工作站从 Windows 7 升级到了 Windows 10。我有一个聊天客户端,它使用以下代码从剪贴板接受图像:
if (Clipboard.ContainsImage())
{
BitmapSource source = Clipboard.GetImage();
BitmapFrame frame = BitmapFrame.Create(source);
var encoder = new System.Windows.Media.Imaging.PngBitmapEncoder();
encoder.Frames.Add(frame);
var stream = new MemoryStream();
encoder.Save(stream);
byte[] daten = stream.ToArray();
if (daten != null && daten.Length > 0)
{
sendFile(DateTime.Now.ToString("yyyyMMddHHmmss_") + "clipboard.png", stream.ToArray());
}
}
这是我截屏的区域应该的样子(例如,如果我将其粘贴到 MS-Paint 或直接从截图工具中保存):
现在这是我使用Clipboard.GetImage(); 导入屏幕截图后的样子。
如您所见,所有文本都被删除了,如果您仔细观察,您会发现通常为白色的背景现在是透明的。
如果我使用JpegBitmapEncoder 而不是PngBitmapEncoder,它可以正常工作,所以这应该是编码问题,但让我感到困惑的是:
- 这在 Windows 7 上从未发生过 - Windows 10 中发生了什么变化 这会让屏幕截图有什么不同?
- 如果我将屏幕截图保存到截图工具的文件中,则会创建一个 PNG(数据本身包含 PNG-Header)。那么为什么 PNG 不是正确的编码方式?
【问题讨论】:
-
奇怪...据我所知,Windows 剪贴板甚至不支持透明度。
-
在 Gimp 中粘贴肯定不行……更不用说,你截屏的窗口在那里没有透明度。
-
如果您删除所有 alpha,图像仍然包含所有信息。我想我明白了,但我不是 100% 确定。您使用的是哪个版本的 .net 框架?因为在 3.5 上它似乎没有这样做,但 4+ 版本可能会有不同的反应。
-
我还没有实际测试过差异,但我可以通过比较您的 4.5 体验和我的 3.5 体验来观察它。希望我的回答对你有用。
标签: c# image-processing windows-10 screenshot clipboard