Android - Cut a circle from a square Bitmap

前端 未结 3 806
借酒劲吻你
借酒劲吻你 2020-12-08 08:13

I am trying to cut a circle from a square bitmap using following code

        Canvas canvas=new Canvas(bitmapimg );
        int circleXCoord = bitmapimg .get         


        
3条回答
  •  醉酒成梦
    2020-12-08 08:56

    For anyone that's still looking at this, this answer will cause a few issues.

    1.) The canvas that you are creating in this instance will not have hardware acceleration. Even though your Paint object has anti-aliasing, the canvas will not. This will cause artifacting when you decide to paint this back to your original canvas in your onDraw() call.

    2.) This takes a lot more resources. You have to create a second Bitmap (which can cause OOM), and a secondary Canvas as well as all of the different alterations you have to do.

    Please check out Romain Guy's answer. You create a BitmapShader and then create a RoundRect that gives you a Circle. You just need to know the dimensions of your RectF so that it can determine the circle properly.

    This means that if you know the center point (x, y) and radius, you can easily determine the RectF.

    left = x - radius;
    top = y - radius;
    right = x + radius;
    bottom = y + radius;
    

    This also means that with this solution posted below you only have to draw to the screen once, everything else is done in the off-screen buffer.

    http://www.curious-creature.com/2012/12/11/android-recipe-1-image-with-rounded-corners/

    The best solution is found here:

    BitmapShader shader;
    shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(shader);
    
    RectF rect = new RectF(0.0f, 0.0f, width, height);
    
    // rect contains the bounds of the shape
    // radius is the radius in pixels of the rounded corners
    // paint contains the shader that will texture the shape
    canvas.drawRoundRect(rect, radius, radius, paint);
    

提交回复
热议问题