예제 #1
0
 public void DrawRectangle(Pen pen, int x1, int y1, int w, int h)
 {
     APaint.Color = pen.Color.AColor();
     APaint.Flags = (Android.Graphics.PaintFlags) 0;
     APaint.Flags = Flags;
     APaint.SetStyle(Android.Graphics.Paint.Style.Stroke);
     APaint.StrokeWidth = LineWidth;
     ACanvas.DrawRect(x1, y1, x1 + w, y1 + h, APaint);
 }
        public void SurfaceCreated(ISurfaceHolder holder)
        {
            this.holder = holder;
            //畫筆定義
            Android.Graphics.Paint mpaint = new Android.Graphics.Paint();
            mpaint.Color = Android.Graphics.Color.Yellow;
            mpaint.SetStyle(Android.Graphics.Paint.Style.Stroke);
            mpaint.StrokeWidth = 4f;
            //畫布
            Android.Graphics.Canvas canvas = holder.LockCanvas();
            //清除畫布用
            canvas.DrawColor(Android.Graphics.Color.Transparent, Android.Graphics.PorterDuff.Mode.Clear);
            // 畫布長寬
            var w = sv_rec.Width;
            var h = sv_rec.Height;

            //控制正方形位置
            Android.Graphics.Rect r = new Android.Graphics.Rect((int)w / 16, (int)h / 8, (int)w / 16 + 7 * w / 8, (int)h / 8 + h / 2);

            //canvas.DrawRect(r, mpaint);   //正方形

            //左下框
            canvas.DrawRect(r.Left - 2, r.Bottom, r.Left + 50, r.Bottom + 2, mpaint);
            canvas.DrawRect(r.Left - 2, r.Bottom - 50, r.Left, r.Bottom, mpaint);
            //左上框
            canvas.DrawRect(r.Left - 2, r.Top - 2, r.Left + 50, r.Top, mpaint);
            canvas.DrawRect(r.Left - 2, r.Top, r.Left, r.Top + 50, mpaint);
            //右上框
            canvas.DrawRect(r.Right - 50, r.Top - 2, r.Right + 2, r.Top, mpaint);
            canvas.DrawRect(r.Right, r.Top, r.Right + 2, r.Top + 50, mpaint);
            //右下框
            canvas.DrawRect(r.Right - 50, r.Bottom, r.Right + 2, r.Bottom + 2, mpaint);
            canvas.DrawRect(r.Right, r.Bottom - 50, r.Right + 2, r.Bottom, mpaint);

            holder.UnlockCanvasAndPost(canvas);
        }
예제 #3
0
        public override Carto.Graphics.Bitmap OnDrawPopup(PopupDrawInfo popupDrawInfo)
        {
            PopupStyle style = popupDrawInfo.Popup.Style;

            // Calculate scaled dimensions
            float DPToPX = popupDrawInfo.DPToPX;
            float PXTODP = 1 / DPToPX;

            if (style.ScaleWithDPI)
            {
                DPToPX = 1;
            }
            else
            {
                PXTODP = 1;
            }

            float screenWidth  = popupDrawInfo.ScreenBounds.GetWidth() * PXTODP;
            float screenHeight = popupDrawInfo.ScreenBounds.GetHeight() * PXTODP;

            // Update sizes based on scale (uses extension method, cf. Shared/Extensions
            int fontSize = FontSize.Update(DPToPX);

            int triangleWidth  = TriangleSize.Update(DPToPX);
            int triangleHeight = TriangleSize.Update(DPToPX);

            int strokeWidth   = StrokeWidth.Update(DPToPX);
            int screenPadding = ScreenPadding.Update(DPToPX);

            // Set font
            var font = Android.Graphics.Typeface.Create("HelveticaNeue-Light", Android.Graphics.TypefaceStyle.Normal);

            // Calculate the maximum popup size, adjust with dpi
            int maxPopupWidth = (int)(Math.Min(screenWidth, screenHeight));

            float halfStrokeWidth = strokeWidth * 0.5f;
            int   maxTextWidth    = maxPopupWidth - (2 * screenPadding + strokeWidth);

            // Measure text
            TextPaint textPaint = new TextPaint {
                Color = TextColor, TextSize = fontSize
            };

            textPaint.SetTypeface(font);

            var textLayout = new StaticLayout(text, textPaint, maxTextWidth, Layout.Alignment.AlignNormal, 1, 0, false);

            int textX = (int)Math.Min(textPaint.MeasureText(text), textLayout.Width);
            int textY = textLayout.Height;

            int popupWidth  = textX + (2 * PopupPadding + strokeWidth + triangleWidth);
            int popupHeight = textY + (2 * PopupPadding + strokeWidth);

            var bitmap = Android.Graphics.Bitmap.CreateBitmap(popupWidth, popupHeight, Android.Graphics.Bitmap.Config.Argb8888);
            var canvas = new Android.Graphics.Canvas(bitmap);

            var trianglePath = new Android.Graphics.Path();

            trianglePath.MoveTo(triangleWidth, 0);
            trianglePath.LineTo(halfStrokeWidth, triangleHeight * 0.5f);
            trianglePath.LineTo(triangleWidth, triangleHeight);
            trianglePath.Close();

            int triangleOffsetX = 0;
            int triangleOffsetY = (popupHeight - triangleHeight) / 2;

            // Create paint object
            var paint = new Android.Graphics.Paint();

            paint.AntiAlias = true;
            paint.SetStyle(Android.Graphics.Paint.Style.Stroke);
            paint.StrokeWidth = strokeWidth;
            paint.Color       = StrokeColor;

            // Stroke background
            var background = new Android.Graphics.RectF();

            background.Left   = triangleWidth;
            background.Top    = halfStrokeWidth;
            background.Right  = popupWidth - strokeWidth;
            background.Bottom = popupHeight - strokeWidth;
            canvas.DrawRect(background, paint);

            // Stroke triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            // Fill background
            paint.SetStyle(Android.Graphics.Paint.Style.Fill);
            paint.Color = BackgroundColor;
            canvas.DrawRect(background, paint);

            // Fill triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            if (textLayout != null)
            {
                // Draw text
                canvas.Save();
                canvas.Translate(halfStrokeWidth + triangleWidth + PopupPadding, halfStrokeWidth + PopupPadding);
                textLayout.Draw(canvas);
                canvas.Restore();
            }

            return(BitmapUtils.CreateBitmapFromAndroidBitmap(bitmap));
        }
        public override Carto.Graphics.Bitmap OnDrawPopup(PopupDrawInfo popupDrawInfo)
        {
            PopupStyle style = popupDrawInfo.Popup.Style;

            // Calculate scaled dimensions
            float DPToPX = popupDrawInfo.DPToPX;
            float PXTODP = 1 / DPToPX;

            if (style.ScaleWithDPI)
            {
                DPToPX = 1;
            }
            else
            {
                PXTODP = 1;
            }

            float screenWidth = popupDrawInfo.ScreenBounds.GetWidth() * PXTODP;
            float screenHeight = popupDrawInfo.ScreenBounds.GetHeight() * PXTODP;

            // Update sizes based on scale (uses extension method, cf. Shared/Extensions
            int fontSize = FontSize.Update(DPToPX);

            int triangleWidth = TriangleSize.Update(DPToPX);
            int triangleHeight = TriangleSize.Update(DPToPX);

            int strokeWidth = StrokeWidth.Update(DPToPX);
            int screenPadding = ScreenPadding.Update(DPToPX);

            // Set font
            var font = Android.Graphics.Typeface.Create("HelveticaNeue-Light", Android.Graphics.TypefaceStyle.Normal);

            // Calculate the maximum popup size, adjust with dpi
            int maxPopupWidth = (int)(Math.Min(screenWidth, screenHeight));

            float halfStrokeWidth = strokeWidth * 0.5f;
            int maxTextWidth = maxPopupWidth - (2 * screenPadding + strokeWidth);

            // Measure text
            TextPaint textPaint = new TextPaint { Color = TextColor, TextSize = fontSize };
            textPaint.SetTypeface(font);

            var textLayout = new StaticLayout(text, textPaint, maxTextWidth, Layout.Alignment.AlignNormal, 1, 0, false);

            int textX = (int)Math.Min(textPaint.MeasureText(text), textLayout.Width);
            int textY = textLayout.Height;

            int popupWidth = textX + (2 * PopupPadding + strokeWidth + triangleWidth);
            int popupHeight = textY + (2 * PopupPadding + strokeWidth);

            var bitmap = Android.Graphics.Bitmap.CreateBitmap(popupWidth, popupHeight, Android.Graphics.Bitmap.Config.Argb8888);
            var canvas = new Android.Graphics.Canvas(bitmap);

            var trianglePath = new Android.Graphics.Path();
            trianglePath.MoveTo(triangleWidth, 0);
            trianglePath.LineTo(halfStrokeWidth, triangleHeight * 0.5f);
            trianglePath.LineTo(triangleWidth, triangleHeight);
            trianglePath.Close();

            int triangleOffsetX = 0;
            int triangleOffsetY = (popupHeight - triangleHeight) / 2;

            // Create paint object
            var paint = new Android.Graphics.Paint();
            paint.AntiAlias = true;
            paint.SetStyle(Android.Graphics.Paint.Style.Stroke);
            paint.StrokeWidth = strokeWidth;
            paint.Color = StrokeColor;

            // Stroke background
            var background = new Android.Graphics.RectF();
            background.Left = triangleWidth;
            background.Top = halfStrokeWidth;
            background.Right = popupWidth - strokeWidth;
            background.Bottom = popupHeight - strokeWidth;
            canvas.DrawRect(background, paint);

            // Stroke triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            // Fill background
            paint.SetStyle(Android.Graphics.Paint.Style.Fill);
            paint.Color = BackgroundColor;
            canvas.DrawRect(background, paint);

            // Fill triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            if (textLayout != null)
            {
                // Draw text
                canvas.Save();
                canvas.Translate(halfStrokeWidth + triangleWidth + PopupPadding, halfStrokeWidth + PopupPadding);
                textLayout.Draw(canvas);
                canvas.Restore();
            }

            return BitmapUtils.CreateBitmapFromAndroidBitmap(bitmap);
        }
예제 #5
0
 protected override void DoDraw(Android.Graphics.Canvas canvas, Android.Graphics.Paint paint)
 {
     canvas.DrawRect(Bounds, paint);
 }
예제 #6
0
 /// <summary>
 /// Get OCR text and draw lines on original photo
 /// </summary>
 /// <param name="imageBytes"></param>
 /// <param name="threshhold"></param>
 private async void PerformOCR(byte[] imageBytes, double threshhold)
 {
     if (_api.Initialized)
     {
         string resultText = "";
         var result = await _api.SetImage(imageBytes);
         if (result)
         {
             resultText = _api.Text;
             bitmapWithBoxes = bitmap.Copy(bitmap.GetConfig(), true);
             Android.Graphics.Canvas canvas = new Android.Graphics.Canvas(bitmapWithBoxes);
             Android.Graphics.Color color = Android.Graphics.Color.IndianRed;
             Android.Graphics.Paint paint = new Android.Graphics.Paint();
             paint.SetStyle(Android.Graphics.Paint.Style.Stroke);
             paint.StrokeWidth = 2;
             foreach (Tesseract.Result r in _api.Results(Tesseract.PageIteratorLevel.Textline))
             {
                 if (r.Confidence > 50)
                 {
                     paint.Color = Android.Graphics.Color.GreenYellow;
                 }
                 else if (r.Confidence > 10)
                 {
                     paint.Color = Android.Graphics.Color.DarkOrange;
                 }
                 else
                 {
                     paint.Color = Android.Graphics.Color.DarkRed;
                 }
                 canvas.DrawRect(r.Box.X, r.Box.Y, r.Box.X + r.Box.Width, r.Box.Y + r.Box.Height, paint);
             }
             canvas.Dispose();
             Android.Util.Log.Info("tesseract result", resultText);
             PostProcessing pp = new PostProcessing();
             pp.ProcessString(resultText);
             _data = pp.processedList;
         }
     }
     else
     {
         Toast.MakeText(this, "OCR not initialized.", ToastLength.Long).Show();
     }
 }