3

网上关于 DrawFilter 的讨论很少,所以我找不到以下问题的正确答案:

这里已经记录了:

DrawFilter 子类可以安装在 Canvas 中。当它存在时,它可以(临时)修改用于绘制的油漆。有了这个,过滤器可以禁用/启用抗锯齿,或更改所有绘制的颜色。

所以我确实想使用此功能来将画布中绘制的颜色更改为黑色,但它是如何完成的呢?因为这个类没有方法来覆盖它的一个谜,我应该如何将它子类化以实现记录的内容......

顺便说一句,对于从未见过它的人来说,canvas 有一个应该使用的方法 canvas.setDrawFilter(DrawFilter),我试图查看开源代码,但我没有得到任何线索......

有任何想法吗?

4

2 回答 2

6

唯一可用的子类似乎DrawFilter专门用于调整Paint标志中的位:

setDrawFilter(new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG,Paint.DITHER_FLAG))

所以,我怀疑它有多大用处。

另外,请查看ColorFilter. 和setSaturation()ColorMatrix。这可能有助于绘制灰度图。

示例:在画布上将彩色图像 ( ) 绘制inImg为黑白 (outImg大小):size

    Bitmap outImg = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);
    Canvas can = new Canvas(outImg);
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    Paint pnt = new Paint(Paint.DITHER_FLAG);
    pnt.setColorFilter(new ColorMatrixColorFilter(cm));
    can.drawBitmap(inImg, 0, 0,pnt);
于 2012-11-02T08:45:18.223 回答
-3

研究 Android SDK 示例目录中的 com.example.android.apis.graphics 类。

于 2013-08-06T14:21:21.607 回答