C# 获取EZTwain条码并识别返回值-4
我正在尝试使用EZTwain扫描库从扫描的图像中检索条形码,当我尝试调用C# 获取EZTwain条码并识别返回值-4,c#,barcode,intptr,twain,hbitmap,C#,Barcode,Intptr,Twain,Hbitmap,我正在尝试使用EZTwain扫描库从扫描的图像中检索条形码,当我尝试调用EZTwain.BARCODE_Recognize(IntPtr,int,int)时,返回值为-4,EZTwain用户指南中没有相关说明 在EZTwain用户指南中,它列出了一些用作错误代码的返回值 条码识别 int条码识别(HDIB HDIB,int nMaxCount,int nType) 查找并识别给定图像中的条形码。 不要查找超过nMaxCount的条形码(-1表示“任意数字”)。 指定类型的条形码除外(-1表示“任
EZTwain.BARCODE_Recognize(IntPtr,int,int)
时,返回值为-4,EZTwain用户指南中没有相关说明
在EZTwain用户指南中,它列出了一些用作错误代码的返回值
条码识别
int条码识别(HDIB HDIB,int nMaxCount,int nType)
查找并识别给定图像中的条形码。
不要查找超过nMaxCount的条形码(-1表示“任意数字”)。
指定类型的条形码除外(-1表示“任何支持的类型”)
您可以将“或”或“或”添加到一起,以告知识别器查找更多条形码类型
不止一个符号。返回值:
>找到0个条形码
0未找到条形码
-1条形码服务不可用。
-3无效或空图像
这里没有列出-4返回值,我不知道还有什么地方可以查看,因为我知道只有用户指南可以用于这个库的文档
这是我在返回-4代码时使用的代码
我确实打电话给EZTwain_SetVendorKey,但出于明显的原因,我没有打这个电话
我想知道这是否与我通过的IntPtr
有关?文档中说,callbarcode\u Recognize,将图像的句柄传递给它进行搜索
要查找的条形码修补程序的最大数量,以及条形码的掩码
要查找的类型(符号)。如果此函数找到任何条形码,则返回
正整数=找到的符号(条形码)计数。
我通过IntPtr
I使用图像创建,并-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;
}
}
public static string GetBarcode(位图图像,out-BarcodeType-BarcodeType,int-percentthatCanbennonWhitish=2,int-pixelTolerance=10)
{
//初始化条形码类型以安抚编译器
barcodeType=barcodeType.NotBarcode;
BitmapData bd=image.LockBits(新矩形(0,0,image.Width,image.Height),
ImageLockMode.ReadWrite,
图像(像素格式);
列表条形码=新列表();
EZTwain.BARCODE_SelectEngine(EZTwain.EZBAR_ENGINE_DOSADI);
EZTwain.BARCODE_设置方向标志(EZTwain.EZBAR_水平| EZTwain.EZBAR_垂直);
IntPtr imgPtr=image.GetHbitmap();
如果(EZTwain.DIB_为空(imgPtr.002)=真)
{
//什么也不做,这一页是空白的
}
else if(EZTwain.BARCODE_IsEngineAvailable(EZTwain.EZBAR_ENGINE_DOSADI))
{
整数计数;
计数=EZTwain.条形码识别(imgPtr,-1,-1);
for(int i=0;i
有人知道这个错误代码是什么意思吗?如果是这样的话,你是从哪里发现它的意思的呢?这个错误仅仅意味着存在某种未指明的内存错误 扎克,你可能已经弄明白了。未来读者:
1-我认为我们现在必须坚持使用3.30版本,因为我们在客户机器上安装了另一个使用该版本EZTwain库的产品,我不确定如果我们安装了3.43版本,该产品是否会继续工作。2-我现在明白了什么是IntPtr。它不是任何特定的对象类型,而是指向内存位置的指针。GetHBitmap方法说它返回一个GDI位图,但它由一个IntPtr表示,我可以将它从位图传递到DIB_,以便在它识别条形码时获得所需的HDIB eztwain。不管怎样,它现在可以工作了..3-第49页这里,第2点说“EZTwain可以使用DIB_FromBitmap将DDB(HBITMAP)转换为DIB”。所以我们使用GetHBitmap获取HBITMAP指针并将其传递给BARCODE_。听起来不错。重新升级:根据设计,任何更高版本的EZTwain都应该是3.30版本的替代品。当然,对于生产部署,它仍然要负责测试——首先在一台机器上进行测试,然后在使用多台扫描仪的情况下对每种型号的扫描仪进行测试。但我们努力工作,从不在一个小版本步骤中破坏正在工作的客户代码。