I was experimenting with ResultPoints which returns the points related to the barcode in the image.
For a QR Code, ResultPoints returns a set of 4 points which are the coordinates of the four boxes at each corner of the QR Code.
When I experimented the same with a Barcode, it returns two points which denote the width of the barcode.
How do I find the bounding rectangle of the barcode?
Is there any way by which I can calculate the coordinates of the top left corner and bottom right corner of the barcode using the ResultPoints array?
After a bit of research I found the class WhiteRectangleDetector. It was exactly the thing I was interested in but when I started playing around with it, it gave me partial results but not exact results. I have attached an image of the result obtained by using WhiteRectangleDetector but as we can see, it just colors the middle portion of the barcode and not the whole rectangular portion of the barcode. So I was wondering if I could be able to shade the whole rectangular portion of the barcode.
My code:
barcodeBitmap = (Bitmap)Bitmap.FromFile("barcode-image.png");
var luminanceSource = new ZXing.BitmapLuminanceSource(barcodeBitmap);
var binarizer = new ZXing.Common.HybridBinarizer(luminanceSource);
var bitMatrix = binarizer.BlackMatrix;
var whiterect = WhiteRectangleDetector.Create(bitMatrix);
ResultPoint[] whiterectpts = whiterect.detect();
if (whiterectpts != null)
{
Console.WriteLine("\nWhiteRectangleDetector\n");
foreach (var w in whiterectpts)
{
Console.WriteLine(w);
}
Rectangle whiterectangle = new Rectangle((int)whiterectpts[0].X, (int)whiterectpts[0].Y, (int)(whiterectpts[2].X - whiterectpts[1].X), (int)(whiterectpts[1].Y - whiterectpts[0].Y));
img = Image.FromFile("barcode-image.png");
g = Graphics.FromImage(img);
g.DrawRectangle(pen, whiterectangle);
img.Save("crop2.png");
}