Следующая функция успешно изменяет контраст и яркость изображения.
Bitmap bmp;
ImageView alteredImageView;
...
public void drawAlteredImage(float contr,float bright) {
Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
Canvas canvas = new Canvas(alteredBitmap);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.set(new float[] {
contr, 0, 0, 0, bright,
0, contr, 0, 0, bright,
0, 0, contr, 0, bright,
0, 0, 0, 1, 0 });
paint.setColorFilter(new ColorMatrixColorFilter(cm));
Matrix matrix = new Matrix();
canvas.drawBitmap(bmp, matrix, paint);
alteredImageView.setImageBitmap(alteredBitmap);
}
Но когда я добавил метод setSaturation в ColorMatrix, контраст и изменение яркости перестали работать. Код:
public void drawAlteredImage(float contr,float bright,float satur) {
Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
Canvas canvas = new Canvas(alteredBitmap);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.set(new float[] {
contr, 0, 0, 0, bright,
0, contr, 0, 0, bright,
0, 0, contr, 0, bright,
0, 0, 0, 1, 0 });
cm.setSaturation(satur);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
Matrix matrix = new Matrix();
canvas.drawBitmap(bmp, matrix, paint);
alteredImageView.setImageBitmap(alteredBitmap);
}
В этом случае применяется только эффект насыщения. Почему эта проблема происходит? Как я могу это исправить?