Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 剪贴板.ContainsImage对象引用未设置为对象的实例_C#_.net_Excel_Bitmap_Clipboard - Fatal编程技术网

C# 剪贴板.ContainsImage对象引用未设置为对象的实例

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

这个问题可能已经有了答案: 什么是NullReferenceException,如何修复它?17个答案 我在Clipboard.ContainsImage()上遇到问题,有时无法正常工作,有时会出现错误“对象引用未设置为对象的实例”。在我的应用程序中,我试图从EXCEL文档中获取图像

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