获取EZTwain barcode_recognition返回值-4



我试图使用EZTwain扫描库从扫描图像中检索条形码,当我尝试调用EZTwain.BARCODE_Recognize(IntPtr, int, int)时,我得到了-4的返回值,在EZTwain用户指南中没有描述。

在EZTwain用户指南中,它列出了一些作为错误码使用的返回值,如您在这里看到的。

<标题> BARCODE_Recognize h1> 有列出-4返回值,我不知道还能去哪里找,因为用户指南是我所知道的唯一可用于该库文档的东西。

这是我得到-4返回的代码时使用的代码。

我确实调用了EZTwain_SetVendorKey,但出于明显的原因没有调用。

我想知道它是否与我正在通过的IntPtr有关?文档显示Call BARCODE_Recognize, passing it the handle of the image to search, the maximum number of barcode patches to find, and a mask of the barcode types (symbologies) to look for. If this function finds any barcodes, it returns a positive integer = the count of symbols (barcodes) found.

我传递我使用图像创建的IntPtr,并使用-1,-1查找图像中的所有条形码,使用所有条形码类型。

public static string GetBarcode(Bitmap image, out BarcodeType barcodeType, int percentThatCanBeNonWhitish = 2, int pixelTolerance = 10)
{
  // initialize barcodeType to appease the compiler
  barcodeType = BarcodeType.NotBarcode;
  BitmapData bd = image.LockBits(new Rectangle(0, 0, image.Width, image.Height),
    ImageLockMode.ReadWrite,
    image.PixelFormat);
  List<string> barcodes = new List<string>();
  EZTwain.BARCODE_SelectEngine(EZTwain.EZBAR_ENGINE_DOSADI);
  EZTwain.BARCODE_SetDirectionFlags(EZTwain.EZBAR_HORIZONTAL | EZTwain.EZBAR_VERTICAL);
  IntPtr imgPtr = image.GetHbitmap();
  if (EZTwain.DIB_IsBlank(imgPtr, .002) == true)
  {
    // Do nothing, the page is blank
  }
  else if (EZTwain.BARCODE_IsEngineAvailable(EZTwain.EZBAR_ENGINE_DOSADI))
  {
    int count;
    count = EZTwain.BARCODE_Recognize(imgPtr, -1, -1);
    for (int i = 0; i < count; i++)
    {
        barcodes.Add(EZTwain.BARCODE_Text(i));
    }
  }
  if (barcodes.Count != 0)
  {
    string barcode = barcodes[0];
    // sets the type to coversheet if it is blank, else it uses ProcessBarcodeType()
    barcodeType = image.IsBlank(percentThatCanBeNonWhitish, pixelTolerance) ? BarcodeType.CoversheetBarcode : ProcessBarcodeType(barcode);
    return barcode;
  }
  else
  {
    return null;
  }
}

有人知道这个错误代码是什么意思吗?如果是的话,你从哪里发现它的含义的?

Zack,你可能已经明白了。给将来的读者:

  1. 有一个更新版本的EZTwain工具包,其中记录了-4返回代码。但是,它只是说"内存错误(低内存?)"-在这种情况下仍然不是很有帮助!Atalasoft在eztwain.com上提供了更新的工具包,任何有效的EZTwain Pro 3许可证将继续与以后的3一起工作。

  2. EZTwain期望的图像参数(在其API中几乎无处不在)不仅仅是一个"图像句柄",而是具体和精确地HDIB,这是一个全局句柄到一个内存块,包含一个打包的DIB =设备独立位图。这些都是来自Win32 API的古老的东西,只有特定的组合才能被EZTwain理解。不要因为看到它们被表示为IntPtr而感到困惑——IntPtr可以保存各种不同的底层本机对象。我猜GetHBitmap不返回HDIB,而是一个旧的Windows API称为HBITMAP的对象,这听起来令人困惑的相似,完全不能与HDIB互换。

  3. EZTwain包含许多函数用于转换和从其他类型的内存图像格式,如HBITMAP。我甚至认为在工具包的最新版本中,eztwin .cs文件有一些函数可以从System.Drawing.Bitmap <==> HDIB(表示为System.IntPtr)。

该错误仅表示存在某种未指定的内存错误。

相关内容

  • 没有找到相关文章

最新更新