3

我遇到了一个问题,即使用 ColorMatrixColorFilter 会产生不同的输出。我得到了这张照片: 在此处输入图像描述

它有白色、红色和透明的部分。我有一个视图,覆盖了 onDraw(Canvas) 方法,我在其中绘制了这张图片。

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(r, 0, 0, null);
        canvas.drawBitmap(r, r.getWidth(), 0, blank);
        canvas.drawBitmap(r, r.getWidth() * 2, 0, identity);//darker why?
        canvas.drawBitmap(identityfiltered, r.getWidth() * 3, 0, null);
        canvas.drawBitmap(identityfiltered, r.getWidth() * 4, 0, blank);
        canvas.drawBitmap(identityfiltered, r.getWidth() * 5, 0, identity);//darker why?
    }

其他变量解释:

Paint blank = new Paint(); //blank paint

ColorMatrixColorFilter filter = new ColorMatrixColorFilter(new float[] { 
                    1, 0f, 0f, 0f, 0f, // red
                    0, 1f, 0f, 0f, 0f, // green
                    0, 0f, 1f, 0f, 0f, // blue
                    0, 0f, 0f, 1f, 0f, // alpha
            });
Paint identity = new Paint();
identity.setColorFilter(filter); //the paint with identity filter

Bitmap r = BitmapFactory.decodeResource(getResources(), R.drawable.my_drawable);// my drawable

Bitmap identityfiltered = Bitmap.createBitmap(r.getWidth(), r.getHeight(), Config.ARGB_8888); //new bitmap with the same width height as my drawable, Bitmap r is drawn on this with the identity filter
Canvas c = new Canvas(identityfiltered);
c.drawBitmap(r, 0, 0, identity);

给定的输出是:

在此处输入图像描述

如您所见,第 3 和第 6 个绘制的位图较暗,即当我使用滤色器直接绘制到 View 的画布时。问题是为什么?由于应用了相同的过滤器,它不应该是相同的吗?

更新:我一直在测试,似乎它与半透明图像有关。我试图复制完全不透明的图像,并且在所有 6 种情况下都很好。

但回到我的形象,我什至尝试使用 API 给出的单位矩阵。

The new ColorMatrix() constructor comes with identity matrix initialized.

但是得到了同样的结果。

4

0 回答 0