【发布时间】:2013-06-27 14:36:04
【问题描述】:
我正在尝试使用从剪贴板粘贴的图像,例如屏幕截图。
这是一段sn-p代码:
public void PasteImage(Image pasteImage)
{
MemoryStream image = new MemoryStream();
pasteImage.Save(image, pasteImage.RawFormat);
image.Position=0;
byte[] byteImage = image.ToArray();
上线:
pasteImage.Save(image, pasteImage.RawFormat);
我收到此错误:
发生“System.ArgumentNullException”类型的未处理异常 在 System.Drawing.dll 中
附加信息:值不能为空。
我正在关注我在此主题上找到的以前的 stackoverflow 帖子,例如 How to compare two images using byte arrays 和 How to convert image in byte array,但无法正常工作。
我想知道从剪贴板中检索到的图像是否有特定的内容。我正在使用此代码来获取图像:
if (Clipboard.ContainsImage())
{
Image pasteImage = GetClipboardImage();
PasteImage(pasteImage);
}
编辑
这是 GetClipboardImage() 背后的代码:
public Image GetClipboardImage()
{
System.Drawing.Image returnImage = null;
if (Clipboard.ContainsImage())
{
returnImage = Clipboard.GetImage();
}
return returnImage;
}
如果我在错误的行上放置一个断点,我可以看到 pasteImage 和 pastImage.RawFormat 都不为空:
这看起来很相关,我会对此有所了解并报告:How can I get an image out of the clipboard without losing the alpha channel in .NET?
【问题讨论】:
-
如果你在该行设置断点.. 是
pasteImage或RawFormatnull? -
它必须是调用代码,我猜 pasteImage 是空的。我所做的 PasteImage sn-p 的唯一区别是没有 image.Position 并且我使用 GetBuffer() 而不是 ToArray()
-
我认为图像或文件不会直接复制到剪贴板。复制对原始文件位置的引用,粘贴后进行复制。将图像复制到剪贴板,然后删除图像,然后尝试粘贴。所以换句话说,据我了解,您无法从剪贴板获取图像的字节,因为从技术上讲,剪贴板不包含图像。
-
因为你得到一个 NullReferenceException 那么可能 pastImage 参数为空,你可以像这样检查它只是为了确保: if (pasteImage == null) System.Diagnostics.Debug.WriteLine("pastImage一片空白”);然后在调试模式下运行应用程序并检查您是否可以在输出窗口中看到“pastImage is null”消息,如果是,那么我是正确的。