gpt4 book ai didi

android - AvoidXferMode容差

转载 作者:搜寻专家 更新时间:2023-11-01 09:18:35 25 4
gpt4 key购买 nike

我对以下代码有疑问:

protected void onDraw(Canvas canvas)
{
Paint paint = new Paint();

// Draw a blue circle
paint.setColor(Color.BLUE);
canvas.drawCircle(100, 100, 50, paint);

// Draw a red circle where it collides with the blue one
paint.setXfermode(new AvoidXfermode(Color.BLUE, 0, Mode.TARGET));
paint.setColor(Color.RED);
canvas.drawCircle(50, 50, 50, paint);
}

根据 AvoidXfermode 的 API 文档,公差值为 0 意味着它会寻找完全匹配的颜色。这应该在这里工作,因为我指定了与我用于绘制第一个圆的颜色相同的颜色。但是结果是红圈根本没有画出来。当我使用 255 的公差值时它会起作用(在与蓝色圆圈碰撞的地方绘制红色圆圈)但这听起来不对,因为具有如此高的公差我认为它应该在任何地方绘制圆圈。

那么这里有什么问题呢? API文档?安卓?我?

最佳答案

您的 Canvas 位深度是 RGB_565 还是 ARGB_8888?我在两种格式上都对此进行了测试。它适用于 32 位 Canvas ,但不适用于 16 位 Canvas 。 16 位图像可能无法显示您正在绘制的确切颜色 (0xFF0000FF),因此当您绘制第一个蓝色圆圈时,它会发生轻微的变化(人眼无法察觉)。然后,当您执行回避时,以零容差精确定位蓝色时,不会显示任何内容,因为真正的蓝色不在图像中。

255 的公差有效,因为它允许避免匹配“几乎是蓝色”的颜色,结果将是一个“几乎是红色”的圆圈。如果使用太高的公差令人不安,请尝试非常低的公差(从 1 开始向上),直到找到一个很小但仍与您要替换的“几乎是蓝色”相匹配的公差。

理想的解决方案是在绘制蓝色圆圈后读取它的颜色值,并以准确的颜色为目标。如果您有正在使用的 Canvas 的位图,并且可以调用 bitmap.getPixel(),这将是可能的。但是,如果您还没有(在 onDraw 方法中没有),我不知道有什么方法可以获取 Canvas 的位图。

关于android - AvoidXferMode容差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2553694/

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