Настройка цветовой температуры в ImageView

Я успешно реализовал функциональность для настройки контрастности и/или яркости ImageView с помощью значений, полученных из пользовательских настроек SeekBars. Для контраста это выглядит так (аналогично для яркости):

// Contrast
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.set(new float[] {
        scale, 0, 0, 0, translate,   // Red
        0, scale, 0, 0, translate,   // Green
        0, 0, scale, 0, translate,   // Blue
        0, 0, 0, 1, 0 });            // Alpha

imageView.setColorFilter(new ColorMatrixColorFilter(colorMatrix);

Таким образом, я мог настроить контрастность и/или яркость, просто масштабируя (умножая) или переводя (добавляя) значения RGB с другим значением.

Как я могу сделать то же самое (используя матрицу) для настройки цветовой температуры изображения?


person Sebastian Engel    schedule 31.01.2014    source источник


Ответы (2)


Я просто создал такую ​​матрицу для своего приложения, чтобы настроить цветовую температуру.

ColorMatrix colorMatrix = new ColorMatrix();

colorMatrix.set(new float[] {
RED/255.0f, 0, 0, 0, 0,
0, GREEN/255.0f, 0, 0, 0
0, 0, BLUE/255.0f, 0, 0,
0, 0, 0, 1, 0}); 
imageView.setColorFilter(new ColorMatrixColorFilter(colorMatrix);

Значения для КРАСНОГО, ЗЕЛЕНОГО и СИНЕГО вы можете получить, например, отсюда: http://www.vendian.org/mncharity/dir3/blackbody/UnstableURLs/bbr_color.html

Он работает отлично, и даже изображения с очень сильной цветовой температурой можно соответствующим образом настроить :)

person destiny    schedule 16.08.2014

Я последовал ответу destiny, но мне пришлось внести некоторые коррективы, вот как я это сделал:

let amount = 255;
let value  = 0;

(1.0000* amount)/255.0, 0, 0, 0, 0,
0, ((1.0000+value)* amount)/255.0, 0, 0, 0,
0, 0, ((1.0000+value)* amount)/255.0, 0, 0,
0, 0, 0, 1, 0
person Community    schedule 06.06.2018