user782104
user782104

Reputation: 13555

How to get the draw element size on a cavans?

enter image description here

I was working on a "draw with mask" app. When the user drag on the screen , it cleans part of the mask.

I implemented it through cavans and with setXfermode Clear

// Specify that painting will be with fat strokes:
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeWidth(canvas.getWidth() / 15);

// Specify that painting will clear the pixels instead of paining new ones:
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

cv.drawPath(path, drawPaint);

The problem is , how can I get the percentage of space cleaned?, it doesn't necessary to be accurate, just roughly detect when more than half of screen size is clean. Thanks for helping

Upvotes: 0

Views: 179

Answers (1)

Rod_Algonquin
Rod_Algonquin

Reputation: 26198

What you need to do is to convert your canvas in to bitmap and count the number of black pixels in it. Using simple math you can divide the number of black pixels to the number of pixels in the canvas which will give you the percentage of black pixels.

sample taken from this post:

 public float percentTransparent(Bitmap bm) { //pass the converted bitmap of canvas
    final int width = bm.getWidth();
    final int height = bm.getHeight();

    int totalBlackPixels = 0;
    for(int x = 0; x < width; x++) {
        for(int y = 0; y < height; y++) {
            if (bm.getPixel(x, y) == Color.BLACK) {
                totalBlackPixels ++;
            }
        }
    }
    return ((float)totalBlackPixels )/(width * height); //returns the percentage of black pixel on screen

}

Upvotes: 1

Related Questions