Android - 位图上的setColorFilter不起作用

时间:2012-07-21 22:14:18

标签: android canvas colors bitmap

下面的代码是否有理由不对源位图mBitmap进行任何更改? mBitmap是我想要应用滤色器的灰度图像。过滤器本身并不重要,但我应用于它的任何滤色器都没有效果。屏幕上绘制的是原始位图,就好像我没有应用过滤器一样。

我可以为它应用不同的滤镜,例如:

mPaint.setColorFilter(new LightingColorFilter(Color.RED, 100));

但是当我从颜色矩阵创建一个滤色器时,我什么都没得到。

我使用的是Android 2.3。

我的代码:

float[] mat = new float[] {
        1f, 0f, 0f, 0f, 1f,
        2f, 0f, 2f, 1f, 0f,
        1f, 1f, 0f, 0f, 0f,
        0f, 0f, 0f, 1f, 0f,
        2f, 0f, 0f, 0f, 1f };

ColorMatrix colorMatrix = new ColorMatrix(mat);
ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);

mPaint.setColorFilter(colorFilter);

mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
mCanvas.drawBitmap(mBitmap, 0, 0, mPaint);

1 个答案:

答案 0 :(得分:2)

抱歉问这个问题。由于我缺乏理解,它的形成很差。据我所知,上方的ColorMatrix实际上什么都不做

简而言之,我原来的问题源于我试图对灰度图像进行色调调整。事实证明:在灰度图像上进行色调调整没有任何意义,因此我没有看到任何变化。

混淆来自这个(优秀的)问题:

Understanding the Use of ColorMatrix and ColorMatrixColorFilter to Modify a Drawable's Hue

我认为提问者只是按照他最初的要求对灰度图像进行色调调整。现在我知道他必须对一些以前着色的图像进行色调调整。

好吧,好吧。最好的学习形式来自于被迫实际思考你想要做的事情!