当我尝试使用WIA扫描时,为什么我的代码会抛出异常?

时间:2013-07-19 12:17:03

标签: c# winforms events

我在C#Winforms上创建一个应用程序来扫描文档并将它们放入PictureBox中,但是当我尝试扫描它时抛出一个异常,说“对象引用未设置为对象的实例”,并且不允许我继续,堆栈跟踪如下;

为了澄清,这是一个工作项目,以防任何人被一些班级名称吓到。

AbDesktop.exe!AbDesktop.FrmCreditCards.ScanSetup() Line 39  C#
    AbDesktop.exe!AbDesktop.FrmCreditCards.ScanFrontBtn_Click(object sender, System.EventArgs e) Line 94 + 0x8 bytes    C#
    [External Code] 
    AbDesktop.exe!AbDesktop.Program.Main(string[] args) Line 26 + 0x20 bytes    C#
    [External Code] 

这是导致问题的代码;

 public void ScanSetup()
 {
     WIA.CommonDialog dialog = new WIA.CommonDialog();
     ImageFile scannedImage=null;

     scannedImage = dialog.ShowAcquireImage(
         WiaDeviceType.ScannerDeviceType,
         WiaImageIntent.UnspecifiedIntent,
         WiaImageBias.MaximizeQuality,
         FormatID.wiaFormatPNG,
         true, true, false);
     scannedImage.SaveFile("C:/Users/reece.cottam/Pictures");
 }

这是触发click事件时执行上述代码的按钮

private void ScanFrontBtn_Click(object sender, EventArgs e)
{
    ScanSetup();
    ImageFile IF = new ImageFile();
    FrontScanBox.Image = IF.LoadFile("scannedimage.png");
}

非常感谢任何帮助。

修改 的 导致错误的代码行是ScannedImage.Savefile

3 个答案:

答案 0 :(得分:1)

如果没有关于哪一行抛出异常的额外信息,我猜这是行scannedImage.SaveFile(...);,因为CommonDialog.ShowAcquireImage(...) scannedImage表示可以返回空值。在这种情况下,当您尝试对变量{{1}}进行操作时,可能会尝试对空引用进行操作。

答案 1 :(得分:0)

Documentation非常清楚, ShowAcquireImage 方法成功时返回一个ImageFile对象,否则返回Nothing。

scanningImage 为空,因为此方法不成功,您需要查看此处传递的参数,阅读文档并进行适当调整,直到获得想要的图像为止。

答案 2 :(得分:0)

您是否尝试过指定实际文件,而不仅仅是要保存到的目录?

scannedImage.SaveFile("C:/Users/reece.cottam/Pictures/test.png");

缺少合适的文件名可能会导致SaveFile函数出错。 虽然这应该在Exception详细信息中可见。