EZTwain 스캐닝 라이브러리를 사용하여 스캔 한 이미지에서 바코드를 검색하려고하는데 EZTwain.BARCODE_Recognize(IntPtr, int, int)
에 전화하려고하면 반환 값 -4가 표시됩니다. EZTwain 사용자 가이드에 대한 설명이 없습니다. EZTwain 사용 설명서의 EZTwain 가져 오기 BARCODE_4 반환 값 확인
int BARCODE_Recognize(HDIB hdib, int nMaxCount, int nType)
Find and recognize barcodes in the given image.
Don't look for more than nMaxCount barcodes (-1 means 'any number').
Expect barcodes of the specified type (-1 means 'any supported type')
You can add or 'or' together barcode types, to tell the recognizer to look for more
than one symbology. Return values:
>0 n barcodes found
0 no barcodes found
-1 barcode services not available.
-3 invalid or null image
값이 나열된 -4 반환이 없습니다 오류 코드로 as you can see here.
BARCODE_Recognize
을 사용하는 일부 반환 값을 나열하고 어디서 모른다 다른 방법으로는이 라이브러리의 설명서에 사용할 수있는 유일한 사용자 안내서가 있기 때문입니다.이것은 -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.
나는 이미지를 사용하여 만들고, 모든 바코드 유형을 사용하여 이미지의 모든 바코드를 찾으려면 -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;
}
}
이 오류 코드의 의미는 누구에게 알려져 있습니까? 그렇다면 그 의미가 어디에서 발견 되었습니까?
1- 우리는 3을 고수해야한다고 생각합니다.30 버전을 사용하고 있습니다. 고객 컴퓨터에 설치된 EZTwain 라이브러리 버전을 사용하는 다른 제품이 있으므로, 3.43 버전을 설치하면이 제품이 계속 작동 할 것인지는 잘 모르겠습니다. 2 - 나는 IntPtr이 무엇인지 이제 이해한다. 특히 객체 유형이 아니라 메모리 위치에 대한 포인터입니다. GetHBitmap 메서드는 GDI 비트 맵을 반환하지만 이는 IntPtr로 표현됩니다.이 메서드는 DIB_FromBitmap에 전달하여 HDIB eztwain이 바코드를 인식 할 때 원하는 결과를 얻을 수 있습니다. 이제 어쨌든 작동합니다 .. – Zack
3 Page 49 http://www.dosadi.com/pub/eztp/EZTwain_User_Guide.pdf, 2 번 항목은 "EZTwain이 DIB (HBITMAP)에서 DIB_FromBitmap으로 DIB로 변환 할 수 있음"을 말합니다. 따라서 우리는 GetHBitmap을 사용하여 해당 HBITMAP 포인터를 가져 와서 BARCODE_Recognize로 전달합니다. – Zack
나에게 맞는 소리. 다시 업그레이드 : EZTwain의 이후 버전 3.x는 3.30 버전의 드롭 인 대체품이어야합니다. 물론 프로덕션 배포의 경우에도 한 대의 컴퓨터에서 먼저 검사 한 다음 두 개 이상의 스캐너를 사용하는 경우 각 모델의 스캐너에서 테스트 할 책임이 있습니다. 그러나 우리는 마이너 버전 단계에서 작업중인 고객 코드를 절대로 깨뜨리지 않도록 노력하고 있습니다. – Spike0xff