/// <summary>
 /// Fills region.
 /// </summary>
 /// <param name="canvas">The canvas.</param>
 /// <param name="region">The region to draw.</param>
 /// <param name="paint">The paint information.</param>
 private void FillRegion(Canvas canvas, Region region, Paint paint)
 {
     _path.Reset();
     _path.MoveTo(region.LeftTop.X, region.LeftTop.Y);
     _path.LineTo(region.RightTop.X, region.RightTop.Y);
     _path.LineTo(region.RightBottom.X, region.RightBottom.Y);
     _path.LineTo(region.LeftBottom.X, region.LeftBottom.Y);
     _path.Close();
     canvas.DrawPath(_path, paint);
 }
        /// <summary>
        /// Draws the barcode information.
        /// </summary>
        /// <param name="canvas">A canvas.</param>
        /// <param name="paint">A paint information.</param>
        /// <param name="barcodeInfo">A barcode.</param>
        /// <param name="scale">A scale value.</param>
        private void DrawBarcodeInfo(Canvas canvas, Paint paint, IBarcodeInfo barcodeInfo, float scale)
        {
            int alpha;
            // get barcode region
            Region barcodeRegion = barcodeInfo.Region;

            if (barcodeRegion == null)
            {
                return;
            }

            // determines whether barcode region should be filled
            bool fill;

            // if confidence of barcode recognition is "-1"
            if (barcodeInfo.Confidence == -1)
            {
                alpha       = 48;
                paint.Color = Color.LimeGreen;
                fill        = true;
            }
            // if confidence of barcode recognition is no less than "95"
            else if (barcodeInfo.Confidence >= 95)
            {
                alpha       = 64;
                paint.Color = Color.LimeGreen;
                fill        = true;
            }
            // if confidence of barcode recognition between 0 and 95
            else
            {
                paint.Color = Color.Red;
                BarcodeInfo2D barcodeInfo2D = barcodeInfo as BarcodeInfo2D;
                if (barcodeInfo2D != null && barcodeInfo2D.GetReferencePoints().Length > 0)
                {
                    alpha = 64;
                    fill  = false;
                }
                else
                {
                    alpha = 32;
                    fill  = true;
                }
            }
            // if barcode region should be filled
            if (fill)
            {
                paint.Alpha = alpha;
                // fill barcode region
                FillRegion(canvas, barcodeInfo.Region, paint);
            }
            paint.Alpha = alpha * 3;
            // if confidence of barcode recognition is no less than "95"
            if (barcodeInfo.Confidence >= 95)
            {
                paint.Color = Color.Orange;
            }
            // draw barcode reference points
            DrawBarcodeReferencePoints(canvas, barcodeInfo, paint);

            // if need draw barcode type
            if (barcodeInfo.BarcodeInfoClass == BarcodeInfoClass.Barcode2D || barcodeInfo.Confidence == -1 || barcodeInfo.Confidence >= 95)
            {
                // get barcode type name
                string text = Utils.GetBarcodeTypeString(barcodeInfo);

                // draw barcode type name
                DrawText(canvas, barcodeInfo.Region.Rectangle, text, _textSizeInPixels / scale, paint.Color, 255, true);
            }
        }