Сделать черный цвет темнее с помощью ColorMatrix в Android

#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 });
        }