Jason
Jason

Reputation: 452

Android Bitmap - Crop a circle into semicircle

I'm trying to cut a circle into semicircles using android canvas. The circle is loaded using Bitmap class.

Here's the example:

enter image description here

I've been looking for any solution, especially the ones which enable you to crop a bitmap using coordinates, but to no avail.

Any help is appreciated, thanks before..

Upvotes: 2

Views: 727

Answers (1)

Farshad
Farshad

Reputation: 3150

I had the same challenge before and I solved it in a simple way, The main idea is simple! Use a Bitmap mask, Fill the pixel you want to save (in this case a pie) with the highest integer value (0xFFFFFFFF), So you can use a bitwiseAND to gain the result color, Other pixels of the mask Bitmap will be a transparent black color (0x00000000), When you're done with the mask, Create the result Bitmap and fill the pixels as the method below does:

public Bitmap applyPieMask(Bitmap src, float startAngle, float sweepAngle) {
    int width = src.getWidth();
    int height = src.getHeight();

    //create bitmap mask with the same dimension of the src bitmap
    Bitmap mask = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(mask);
    canvas.drawColor(0x00000000);//fill mask bitmap with transparent black!

    //init mask paint
    Paint maskPaint = new Paint();
    maskPaint.setColor(0xFFFFFFFF);//pick highest value for bitwise AND operation
    maskPaint.setAntiAlias(true);

    //choose entire bitmap as a rect
    RectF rect = new RectF(0, 0, width, height);
    canvas.drawArc(rect, startAngle, sweepAngle, true, maskPaint);//mask the pie


    Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            //combine src color and mask to gain the result color
            int color = mask.getPixel(i, j) & src.getPixel(i, j);
            result.setPixel(i, j, color);
        }
    }
    return result;
}

And here we go ...

public void doIt(View view) {

    ImageView imageView = (ImageView) findViewById(R.id.iv);
    Bitmap src = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(src);
    canvas.drawColor(Color.BLUE);//fill src bitmap with blue color
    imageView.setImageBitmap(applyPieMask(src, -90, 60));
}

enter image description here

Hope you find it helpful

Upvotes: 1

Related Questions