我遇到了一个问题,即使用 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.
但是得到了同样的结果。