我在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
答案 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详细信息中可见。