Мне нужно растровое изображение в оттенках серого в Android, используя только канал синего цвета. Мне удалось избавиться от зеленого и красного каналов с помощью цветовой матрицы, но когда я устанавливаю насыщенность этой матрицы на 0, она игнорирует ранее внесенные изменения в красный и зеленый каналы.
Есть ли способ выполнить мою задачу? Итерация по всему массиву пикселей невозможна, так как это слишком медленно.
Я использую этот фрагмент кода:
public Bitmap ConvertToGrayscale(Bitmap bitmap) {
int height = super.getHeight();
int width = super.getWidth();
float[] arrayForColorMatrix = new float[] {0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0};
Bitmap.Config config = bitmap.getConfig();
Bitmap grayScaleBitmap = Bitmap.createBitmap(width, height, config);
Canvas c = new Canvas(grayScaleBitmap);
Paint paint = new Paint();
ColorMatrix matrix = new ColorMatrix(arrayForColorMatrix);
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
paint.setColorFilter(filter);
c.drawBitmap(bitmap, 0, 0, paint);
return grayScaleBitmap;
}