如何在android中将2位图与配置ALPHA_8合并?

时间:2014-02-04 11:07:25

标签: android canvas bitmap

如果我使用ALPHA_8加载位图,它将创建一个具有灰度和透明度的位图。这正是我想要的。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ALPHA_8;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test_bitmap, options);

我想合并两个位图。为此,我使用ALPHA_8创建一个画布,并在画布上绘制相同的位图。

但结果却不同。它会保留alpha,但灰色的一切都是黑色的。所以我只看到轮廓而没有灰度。

resultBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ALPHA_8);
resultCanvas = new Canvas(resultBitmap);
resultCanvas.drawBitmap(bitmap, 0, 0, null);

我找到了2个解决方法。

A)使用ARGB_8888而不是ALPHA_8,但这会产生更大的图像。

resultBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);

B)使用颜色矩阵将图像转换为alpha通道,但这会使灰色变为半透明,而不是灰度。

float[] matrix = new float[] {
            0, 0, 0, 0, 0,
            0, 0, 0, 0, 0,
            0, 0, 0, 0, 0,
            -1f, 0, 0, 1f, 0};
Paint grayToAlpha = new Paint();
grayToAlpha.setColorFilter(new ColorMatrixColorFilter(new ColorMatrix(matrix)));
resultCanvas.drawBitmap(bitmap, 0, 0, grayToAlpha);

两种解决方法都不完美。所以我的问题是:

有没有办法在画布上获得与位图相同的结果?

或者

有没有更好的方法将两个位图与ALPHA_8合并在一起?

0 个答案:

没有答案