为什么下面的代码没有对源位图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);

最佳答案

很抱歉提出这个问题。由于我缺乏理解,它的格式不好。就我所知,上面的ColorMatrix实际上什么也不做。

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

困惑来自这个(优秀)问题:

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

我以为质询者只是按照他最初的要求对灰度图像进行了色调调整。现在我知道他一定要对某些以前的彩色图像进行色调调整。

呃,好吧。最好的学习方式来自于被迫去思考您想做什么!

07-24 09:30