gpt4 book ai didi

android - 如何在 canvas android 上绘制路径时覆盖总面积?

转载 作者:可可西里 更新时间:2023-11-01 19:06:05 25 4
gpt4 key购买 nike

我使用下面的代码在手指触摸移动时在位图 Canvas 上画线...我在这里发布了部分代码并且工作正常..

如下图所示,触摸拖动时黑白位图被删除。我将 Canvas 设为透明,以便父布局背景(彩色图像)可见。

我想知道,有多少区域被删除(比如位图的 50% 或 60%)..有什么办法可以找到吗?

enter image description here

//Erasing paint

mDrawPaint = new Paint();
mDrawPaint.setAntiAlias(true);
mDrawPaint.setDither(true);
mDrawPaint.setStyle(Paint.Style.STROKE);
mDrawPaint.setStrokeJoin(Paint.Join.ROUND);
mDrawPaint.setStrokeCap(Paint.Cap.ROUND);
mDrawPaint.setStrokeWidth(50);
mDrawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
BlurMaskFilter mBlur = new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL);
mDrawPaint.setMaskFilter(mBlur);

private void doDraw(Canvas c) {

c.drawBitmap(mBitmap, 0, 0,null );

}

private float mX, mY;
private static final float TOUCH_TOLERANCE = 1;

void touch_start(float x, float y) {
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
}
void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mX = x;
mY = y;
}

canvas.drawPath(mPath, mDrawPaint ); //Erasing Black and white image

}
void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mDrawPaint);
// kill this so we don't double draw
mPath.reset();
}

最佳答案

尝试使用Monte Carlo method估计透明区域的百分比。我认为这是最快和最简单的方法。在透明蒙版上取大约 50 个(取决于您需要的精度)随机像素并检查它们的颜色。然后计算 ans = TransparentPixelsCount/TestPixelCount。

使用路径坐标很难计算用户绘图的平方。遍历所有像素的时间相当长。因此,恕我直言,蒙特卡洛是您的选择。

关于android - 如何在 canvas android 上绘制路径时覆盖总面积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14357246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com