-3

enter image description here请其对图像canvas.drawcircle使用矩阵

大家好一个洞,我是新来的Android开发人员。

我有一个应用程序将清除部分位图。我正在使用矩阵来缩放图像。没有缩放,透明橡皮擦的大小与圆相同,但是当我缩放位图时,橡皮擦透明度大于固定的圆形大小。有人能帮助我吗?..我现在正在为此挣扎1周。

下面是我使用的代码:

  RectF r = new RectF(); 
      matrix.mapRect(r); 
      // sol1 
      float scaledX = (lastX - r.left) + 48; // adjust to the tip of eraser 
      float scaledY = (lastY - r.top) - 137; // adjust to the tip of eraser 
      float[] values = new float[9]; 
      matrix.getValues(values); 
      float scalex = values[Matrix.MSCALE_X]; 
      float skewy = values[Matrix.MSKEW_Y]; 
      float scale = (float) Math.sqrt(scalex * scalex + skewy * skewy); 
      scaledX /= scale; 
      scaledY /= scale; 

      Bitmap bmOverlay = Bitmap.createBitmap(bitmap.getWidth(), 
                bitmap.getHeight(), 
                Bitmap.Config.ARGB_8888); 
      System.out.println("bitmap.getWidth() " + bitmap.getWidth() + 
           " bitmap.getHeight() " + bitmap.getHeight()); 
      Canvas c = new Canvas(bmOverlay); 
      c.drawColor(Color.TRANSPARENT, Mode.CLEAR); 


      c.drawBitmap(bitmap, 0, 0, null); 
      c.drawCircle(scaledX, scaledY, 13.0f, mPaint); // punch a hole 
      bitmap = bmOverlay; // update the main bitmap 
+0

'13.0f/scale' – pskink

+0

hi pskink :)我在图像分层上跟着你的代码。再次感谢这个答案。我已经找到了:)。感谢人 – donmj

+0

法师分层?什么法师分层? “13.0f/scale”工作了吗? – pskink

回答

0

最后我能够实现:

我只是发表意见如下行:)。

// cursor 
    paintCursorRed.setColor(0xffff0000); 
    paintCursorRed.setStyle(Style.STROKE); 
    paintCursorBlackdraw.setColor(0xffffff00); 
    paintCursorBlackdraw.setStyle(Style.STROKE); 
    mPaint = new Paint(); 
    mPaint.setAntiAlias(true); 
    mPaint.setDither(true); 
    mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
    mPaint.setStrokeJoin(Paint.Join.BEVEL); 
    mPaint.setStrokeCap(Paint.Cap.SQUARE); 
    //mPaint.setStrokeWidth(15); 
    //mPaint.setTextSize(15); 
    mPaint.setAlpha(0); 
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    mPaint.setAntiAlias(true); 
    // mPaint.setMaskFilter(new BlurMaskFilter(5, Blur.NORMAL));