C# 剪贴板.ContainsImage对象引用未设置为对象的实例
这个问题可能已经有了答案: 什么是NullReferenceException,如何修复它?17个答案 我在Clipboard.ContainsImage()上遇到问题,有时无法正常工作,有时会出现错误“对象引用未设置为对象的实例”。在我的应用程序中,我试图从EXCEL文档中获取图像C# 剪贴板.ContainsImage对象引用未设置为对象的实例,c#,.net,excel,bitmap,clipboard,C#,.net,Excel,Bitmap,Clipboard,这个问题可能已经有了答案: 什么是NullReferenceException,如何修复它?17个答案 我在Clipboard.ContainsImage()上遇到问题,有时无法正常工作,有时会出现错误“对象引用未设置为对象的实例”。在我的应用程序中,我试图从EXCEL文档中获取图像 Microsoft.Office.Interop.Excel.Picture pic = (Microsoft.Office.Interop.Excel.Picture)ws.Pictures(1); ob
Microsoft.Office.Interop.Excel.Picture pic = (Microsoft.Office.Interop.Excel.Picture)ws.Pictures(1);
object Eclairage = null;
if (pic != null)
{
//This code will detect what the region span of the image was
int startCol = (int)pic.TopLeftCell.Column;
int startRow = (int)pic.TopLeftCell.Row;
int endCol = (int)pic.BottomRightCell.Column;
int endRow = (int)pic.BottomRightCell.Row;
pic.CopyPicture(Microsoft.Office.Interop.Excel.XlPictureAppearance.xlScreen, Microsoft.Office.Interop.Excel.XlCopyPictureFormat.xlBitmap);
if (Clipboard.ContainsImage())
{
Image img = Clipboard.GetImage();
var picture = new Bitmap(img);
Color clr = picture.GetPixel(3, 3);
if (clr.Name == "ff000000") Eclairage = "01";
}
}
使用调试器,我根本找不到问题所在,因为当调试器工作时和不工作时,执行的所有操作都完全相同
异常正好指向
var picture = new Bitmap(img);
因此,img=null的值我想知道,如果Clipboard.ContainsImage为正数,这怎么可能呢?1)剪贴板上的图片会如此之大,以至于无法分配所需的内存将其复制出来?当您不再需要所有图像时,请确保尽快将其处理掉。2) 在调用
ContainsImage()
和GetImage()
之间,可能有其他进程将数据复制到剪贴板中,因此您可能无论如何都应该检查null。1)我在foreach中重复了此处理30张图片,我已经尝试处理所有图像,但始终相同。2) 我不明白,你能给我举个例子吗?看看这篇文章上的解决方案。他们似乎以与你略有不同的方式进入剪贴板。不同的接口等等。请注意接受的解决方案下面的注释。你可以完全避免使用剪贴板,因为它是一种易变的东西,用户可能会干扰它。如果重复的错误对你没有帮助,你需要更具体地说,而不是说你读了它,它对你没有帮助。如果遇到异常,则需要提供完整的堆栈跟踪;您发布的代码行应该根本不能抛出NullReferenceException
。即使img
为null
,我猜Bitmap
构造函数也会抛出ArgumentNullException
,而不是NullReferenceException