Barcode1DReaderGetBarcodeXY
Barcode1DReaderGetBarcodeXY
Hello,
i used the Barcode1DReaderGetBarcodeX1, X2.. methods to draw a red rectangle on an gdimage. I split images by barcode that are acquired by twain and show thumbnails during the process. So far so good.
But if i do the same (exactely the same method to draw the rect is called) by a FileSource and not a TwainSource, the coordinates arent correct.
Height and Width look fine, but the coordinates are like 200 instead of 1600 and so on. Its like its inverted. The barcode is in the upper right corner and the rect is shown on the left side of the image...
It would help me to know by what this can be caused by. I have no clue because the same method that saves the tif by barcode splitting works if the imageID is created by TwainAcquireToGdPictureImage.. but not with TiffCreateMultiPageFromFile / TiffSelectPage ...
cheers
dix
i used the Barcode1DReaderGetBarcodeX1, X2.. methods to draw a red rectangle on an gdimage. I split images by barcode that are acquired by twain and show thumbnails during the process. So far so good.
But if i do the same (exactely the same method to draw the rect is called) by a FileSource and not a TwainSource, the coordinates arent correct.
Height and Width look fine, but the coordinates are like 200 instead of 1600 and so on. Its like its inverted. The barcode is in the upper right corner and the rect is shown on the left side of the image...
It would help me to know by what this can be caused by. I have no clue because the same method that saves the tif by barcode splitting works if the imageID is created by TwainAcquireToGdPictureImage.. but not with TiffCreateMultiPageFromFile / TiffSelectPage ...
cheers
dix
Re: Barcode1DReaderGetBarcodeXY
Hi Dix,
Interesting issue. Could you give me a code snippet to reproduce this problem ?
Also, could you attach the image on which coordinates are reversed ?
Kind regards,
Loïc
Interesting issue. Could you give me a code snippet to reproduce this problem ?
Also, could you attach the image on which coordinates are reversed ?
Kind regards,
Loïc
Re: Barcode1DReaderGetBarcodeXY
uh that will need some time because the methods are part of my little framework that uses you great lib.. i will see what i can do.
Re: Barcode1DReaderGetBarcodeXY
I tried to extract the core of the methods so that you can use it.
Here is a function that draws a rect around a barcode:
Here is the method that is used by a twain and a spitter service:
Here is the caller service (TWAIN). The rect is where it should be...
and this will draw the rect in wrong position:
I hope that helps. I investigated that code and i couldnt see any wrong usage of gdpicture...
Here is a function that draws a rect around a barcode:
Code: Select all
private void AddBarodeRectangle(int DocumentImgID, int BarcodeNo)
{
int x1 = GdLib.Barcode1DReaderGetBarcodeX1(BarcodeNo);
int x2 = GdLib.Barcode1DReaderGetBarcodeX2(BarcodeNo);
int x3 = GdLib.Barcode1DReaderGetBarcodeX3(BarcodeNo);
int x4 = GdLib.Barcode1DReaderGetBarcodeX4(BarcodeNo);
int y1 = GdLib.Barcode1DReaderGetBarcodeY1(BarcodeNo);
int y2 = GdLib.Barcode1DReaderGetBarcodeY2(BarcodeNo);
int y3 = GdLib.Barcode1DReaderGetBarcodeY3(BarcodeNo);
int y4 = GdLib.Barcode1DReaderGetBarcodeY4(BarcodeNo);
int left = x1;
int top = y1;
int right = x2;
int bottom = y4;
if (x3 < x1)
left = x3;
if (y2 < y1)
top = y2;
if (x4 > x2)
right = x4;
if (y3 > y4)
bottom = y3;
int width = right - left;
int height = bottom - top;
int margin = (int)(((double)height + (double)width) / 2) / 5;
GdLib.DrawRectangle(DocumentImgID, left - margin, top - margin, width + margin * 2, height + margin * 2, 20, Color.Red, true);
}
Here is the method that is used by a twain and a spitter service:
Code: Select all
protected bool SplittTifByBarcode(string path, int page, ref int DocumentImgID, int SourceImageID)
{
bool result = false;
if (GdLib.Barcode1DReaderDoScan(SourceImageID, Barcode1DReaderScanMode.BestQuality) == GdPictureStatus.OK)
{
int BarcodeCount = GdLib.Barcode1DReaderGetBarcodeCount();
if (BarcodeCount > 0)
{
if (DocumentImgID != 0)
GdLib.ReleaseGdPictureImage(DocumentImgID);
string value = GdLib.Barcode1DReaderGetBarcodeValue(BarcodeCount);
DocumentImgID = GdLib.CreateClonedGdPictureImageI(SourceImageID);
GdLib.TiffSaveAsMultiPageFile(DocumentImgID, "testfile.tif", (TiffCompression)Config.TiffCompressionMode);
result = true;
#warning "This works if image comes from twain but not from multipage tiff"
int tmpID = GdLib.CreateClonedGdPictureImage(DocumentImgID);
AddBarodeRectangle(DocumentImgID, BarcodeCount);
}
else
GdLib.TiffAddToMultiPageFile(DocumentImgID, SourceImageID);
}
return result;
}
Code: Select all
int TiffImgID = 0;
int page = 0;
int TwainImgID = 0;
int DocumentImgID = 0;
bool barcodeFound;
string path = Guid.NewGuid() + ".tif";
do{
TwainImgID = GdLib.TwainAcquireToGdPictureImage(IntPtr.Zero);
if (TwainImgID != 0)
{
page++;
barcodeFound = this.SplittTifByBarcode(path, page, ref DocumentImgID, TwainImgID);
//we found valid barcode
//so we dont need to save the scan as a complete file in scandirectory
if (!barcodeFound)
TiffImgID = WriteTifFile(TiffImgID, TwainImgID);
}
} while ((TwainImgID != 0) && (GdLib.TwainGetState() > GdPicture.TwainStatus.TWAIN_SOURCE_OPEN));
if (DocumentImgID != 0)
GdLib.ReleaseGdPictureImage(DocumentImgID);
GdLib.TiffCloseMultiPageFile(TiffImgID);
GdLib.ReleaseGdPictureImage(TiffImgID);
GdLib.TwainCloseSourceManager(IntPtr.Zero);
GdLib.TwainCloseSource();
Code: Select all
int page = 0;
int DocumentImgID = 0;
int TiffImageID = GdLib.TiffCreateMultiPageFromFile(path);
int pageCount = GdLib.TiffGetPageCount(TiffImageID);
//iterate over pages of multipage source tiff
for (page = 1; page <= pageCount; page++)
{
//select the current tiff TiffImageID
if (GdLib.TiffSelectPage(TiffImageID, page) == GdPictureStatus.OK)
{
//scan the selected page for barcodes
SplittTifByBarcode(path, page, ref DocumentImgID, TiffImageID);
}
}
if (DocumentImgID != 0)
GdLib.ReleaseGdPictureImage(DocumentImgID);
GdLib.TiffCloseMultiPageFile(TiffImageID);
GdLib.ReleaseGdPictureImage(TiffImageID);
I hope that helps. I investigated that code and i couldnt see any wrong usage of gdpicture...
Re: Barcode1DReaderGetBarcodeXY
Hi,
i tested your image with no issue.
There is a part of your code I don't understand:
i think your problem come here.
This is the code I used to draw bounding box around the barcode (not always rectangle !!!)
i think you should convert it to C++ :
Hope this helps
Loïc
i tested your image with no issue.
There is a part of your code I don't understand:
Code: Select all
int left = x1;
int top = y1;
int right = x2;
int bottom = y4;
if (x3 < x1)
left = x3;
if (y2 < y1)
top = y2;
if (x4 > x2)
right = x4;
if (y3 > y4)
bottom = y3;
int width = right - left;
int height = bottom - top;
int margin = (int)(((double)height + (double)width) / 2) / 5;
This is the code I used to draw bounding box around the barcode (not always rectangle !!!)
i think you should convert it to C++ :
Code: Select all
Dim X1, X2, X3, X4, Y1, Y2, Y3, Y4 As Integer
For i = 1 To oGdPictureImaging.Barcode1DReaderGetBarcodeCount
X1 = oGdPictureImaging.Barcode1DReaderGetBarcodeX1(i)
X2 = oGdPictureImaging.Barcode1DReaderGetBarcodeX2(i)
X3 = oGdPictureImaging.Barcode1DReaderGetBarcodeX3(i)
X4 = oGdPictureImaging.Barcode1DReaderGetBarcodeX4(i)
Y1 = oGdPictureImaging.Barcode1DReaderGetBarcodeY1(i)
Y2 = oGdPictureImaging.Barcode1DReaderGetBarcodeY2(i)
Y3 = oGdPictureImaging.Barcode1DReaderGetBarcodeY3(i)
Y4 = oGdPictureImaging.Barcode1DReaderGetBarcodeY4(i)
oGdPictureImaging.DrawLine(m_ImageID, X1, Y1, X2, Y2, 1, Color.Red, True)
oGdPictureImaging.DrawLine(m_ImageID, X2, Y2, X3, Y3, 1, Color.Red, True)
oGdPictureImaging.DrawLine(m_ImageID, X3, Y3, X4, Y4, 1, Color.Red, True)
oGdPictureImaging.DrawLine(m_ImageID, X4, Y4, X1, Y1, 1, Color.Red, True)
Next
Loïc
Re: Barcode1DReaderGetBarcodeXY
thanks i will try this.
the code you dont understand is just to set the correct borders ( e.g. if the barcode is rotated some degrees)...
i make a breakpoint where it reads the coordinates. they are wrong before that code is reached...
please check my mail about the site / worldwide site licence... i dont get the difference
the code you dont understand is just to set the correct borders ( e.g. if the barcode is rotated some degrees)...
i make a breakpoint where it reads the coordinates. they are wrong before that code is reached...
please check my mail about the site / worldwide site licence... i dont get the difference
Re: Barcode1DReaderGetBarcodeXY
Hi there,
Sorry to revive this old thread, but I have an issue with the same function. (It is on Version 12)
Situation as follows:
I have a sheet Din-A-4 Paper scanned to a GDPictureImage from TWAIN.
On there are 4 Codeabar codes, 3 of which get recognized when I perform BC recognition. So far so good.
The first ones are nearly without skew - nothing peculiar about them. But the last one is skewed by ~70°.
There, I have following readings:
TopLeft = 427 | 2347
TopRight = 649 | 2912
BottomRight = 926 | 2801
BottomLeft = 705 | 2236
Each of them is reasonable, so there aren't some x and y wrongly associated. But the association to "TopLeft" etc seems wrong to me.
Seen relative to the barcode itself, the lefts are left and the rights are right, but they seem topped over ("Top" should be "Bottom" and vice versa).
Haven't tried a barcode with skews <45° or >90°, yet.
Sorry to revive this old thread, but I have an issue with the same function. (It is on Version 12)
Situation as follows:
I have a sheet Din-A-4 Paper scanned to a GDPictureImage from TWAIN.
On there are 4 Codeabar codes, 3 of which get recognized when I perform BC recognition. So far so good.
The first ones are nearly without skew - nothing peculiar about them. But the last one is skewed by ~70°.
There, I have following readings:
TopLeft = 427 | 2347
TopRight = 649 | 2912
BottomRight = 926 | 2801
BottomLeft = 705 | 2236
Each of them is reasonable, so there aren't some x and y wrongly associated. But the association to "TopLeft" etc seems wrong to me.
Seen relative to the barcode itself, the lefts are left and the rights are right, but they seem topped over ("Top" should be "Bottom" and vice versa).
Haven't tried a barcode with skews <45° or >90°, yet.
Re: Barcode1DReaderGetBarcodeXY
Hi Stephan,
Please attach the image so we may replicate the issue.
Or you may open a ticket support on https://support.orpalis.com/index.php?/Tickets/Submit/
Best regards,
Costinel Mitrea
GdPicture Team
Please attach the image so we may replicate the issue.
Or you may open a ticket support on https://support.orpalis.com/index.php?/Tickets/Submit/
Best regards,
Costinel Mitrea
GdPicture Team
Re: Barcode1DReaderGetBarcodeXY
Hi Costinel,
Thanks for reply.
I do not want to file an invalid bug report, because I am not sure if it actually is a bug or it is just me doing something wrong.
I attach the document I used for testing. It is a docx that I printed out and scanned on a HP ScanJet Enterprise Flow 7000 s3 via TWAIN.
Regards, Stephan
P.S.: I did not use Twain Barcode recognition. I used barcode recognition on the resulting GdPictureImage after scan.
Scan params included 300 dpi, black/white, no duplex.
Thanks for reply.
I do not want to file an invalid bug report, because I am not sure if it actually is a bug or it is just me doing something wrong.
I attach the document I used for testing. It is a docx that I printed out and scanned on a HP ScanJet Enterprise Flow 7000 s3 via TWAIN.
Regards, Stephan
P.S.: I did not use Twain Barcode recognition. I used barcode recognition on the resulting GdPictureImage after scan.
Scan params included 300 dpi, black/white, no duplex.
- Attachments
-
- Codeabar.docx
- (27.5 KiB) Downloaded 781 times
Re: Barcode1DReaderGetBarcodeXY
Hi Stephan,
You are right, the barcode coordinates for the skewed barcode are not good.
The association to TopLeft,... should be relative to the original position of the barcode before the rotation.
It should have been:
TopLeft = 705 | 2236
TopRight = 926 | 2801
BottomRight = 649 | 2912
BottomLeft = 427 | 2347
Please save the scanned image and attach it here. Thank you.
I'm sending the issue to the development team. I will keep you updated.
Best regards,
Costinel
You are right, the barcode coordinates for the skewed barcode are not good.
The association to TopLeft,... should be relative to the original position of the barcode before the rotation.
It should have been:
TopLeft = 705 | 2236
TopRight = 926 | 2801
BottomRight = 649 | 2912
BottomLeft = 427 | 2347
Please save the scanned image and attach it here. Thank you.
I'm sending the issue to the development team. I will keep you updated.
Best regards,
Costinel
Re: Barcode1DReaderGetBarcodeXY
Hi Costinel,
Thank you very much for confirmation and support.
Attached to this post, you will find the scanned image.
Since it was scanned in b/w I did not perform any binarization or other image processing.
Please also remember, that I was using GdPicture 12. (It's not in my control if we update or not).
I do not know if this is already fixed in Version 14.
Best regards,
Stephan
Thank you very much for confirmation and support.
Attached to this post, you will find the scanned image.
Since it was scanned in b/w I did not perform any binarization or other image processing.
Please also remember, that I was using GdPicture 12. (It's not in my control if we update or not).
I do not know if this is already fixed in Version 14.
Best regards,
Stephan
- Attachments
-
- barcode_scan.zip
- Scan of the barcode doc. Had to zip it since it wouldn't let me attach the tif.
- (11.78 KiB) Downloaded 786 times
Last edited by Stephan78 on Wed Aug 16, 2017 8:54 am, edited 1 time in total.
Re: Barcode1DReaderGetBarcodeXY
Hi Stephan,
Version 12 is discontinued, so I tried with version 14. Any fix will be available only for version 14.
Please try again to attach the image.
Regards,
Costinel
Version 12 is discontinued, so I tried with version 14. Any fix will be available only for version 14.
Please try again to attach the image.
Regards,
Costinel
Re: Barcode1DReaderGetBarcodeXY
Hi Costinel,
I finally managed to attach the scan. See updated post above.
Regards, Stephan
I finally managed to attach the scan. See updated post above.
Regards, Stephan
Who is online
Users browsing this forum: No registered users and 1 guest