#java #android #colors #android-image #colormatrix
#java #Android #Цвет #android-изображение #colormatrix
Вопрос:
В настоящее время у меня есть следующий код, чтобы получить растровый объект, изменить цвет, а затем сделать его красным, что работает, но мне нужно, чтобы более темные элементы изображения были более темными, на данный момент это похоже на то, что кто-то накрыл изображение красной пленкой, что почти то, что я хочу, но нужно, чтобы черные цвета были темнее:
Bitmap sourceBitmap = BitmapFactory.decodeFile(imgPath);
float[] colorTransform = {
0, 1f, 0, 0, 0,
0, 0, 0f, 0, 0,
0, 0, 0, 0f, 0,
0, 0, 0, 1f, 0};
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0f); //Remove Colour
colorMatrix.set(colorTransform); //Apply the Red
ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
Paint paint = new Paint();
paint.setColorFilter(colorFilter);
Display display = getWindowManager().getDefaultDisplay();
Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, (int)(display.getHeight() * 0.15), display.getWidth(), (int)(display.getHeight() * 0.75));
image.setImageBitmap(resultBitmap);
Canvas canvas = new Canvas(resultBitmap);
canvas.drawBitmap(resultBitmap, 0, 0, paint);
Комментарии:
1. Черный есть черный. Можете ли вы дать ссылку на образец до / после?
Ответ №1:
c = 2;//this will boost your contrast by 2x thus deepening the black (and lightning the white). I'm not sure why at 0 you have anything but black... maybe I don't understand the matrix as well as I think I do... I thought 1 (in place of my c) gets you the original colors.
Anyway... give that a whirl.
float[] colorTransform = {
c, 1f, 0, 0, 0,
0, c, 0f, 0, 0,
0, 0, c, 0f, 0,
0, 0, 0, 1f, 0};
Ответ №2:
Последний столбец из первых трех строк в цветовой матрице изменяет яркость изображения. Он изменен между [-255 … 255]. -255 даст вам черное изображение, а 255 сделает его белым. Этот метод может изменить контрастность. Чем ярче объект, тем темнее он становится. Затем вы можете установить требуемую яркость. Контрастность изменена между [-1… 1].
private static void setContrast(ColorMatrix cm, float contrast) {
float scale = contrast 1.f;
float translate = (-.5f * scale .5f) * 255.f;
cm.set(new float[] {
scale, 0, 0, 0, translate,
0, scale, 0, 0, translate,
0, 0, scale, 0, translate,
0, 0, 0, 1, 0 });
}