0

Вычитание режима наложения с помощью ColorMatrixFilter в Android?

11

Я столкнулся с проблемой при работе с ColorMatrixFilter. У меня есть следующий ColorMatrix, но я хочу использовать его в качестве маски для режима смешивания Subtract, а не применять его напрямую. Как можно это реализовать?

Вот мой ColorMatrix:

colorMatrix[
        0.393, 0.7689999, 0.18899999, 0, 0,
        0.349, 0.6859999, 0.16799999, 0, 0,
        0.272, 0.5339999, 0.13099999, 0, 0,
        0,     0,         0,          1, 0
    ];

Буду признателен за любые советы или примеры кода!

1 ответ(ов)

0

Не являюсь экспертом в области компьютерной графики, но, предположительно, вам нужно пройти через каждый пиксель изображения, которое вы хотите смешать, центрировать свою colorMatrix на каждом пикселе, рассчитать среднее значение, используя окружающие пиксели, с которыми соприкасается ваша матрица, а затем применить это среднее к вашему пикселю. Очевидно, что вам нужно будет как-то обработать крайние пиксели.

Пример: предположим, у вас есть изображение 5x4 с пиксельными значениями, как показано ниже:

    1     2    3    4    5
 1 1000 1000 1000 1000 1000
 2 1000 1000 1000 1000 1000
 3 1000 1000 1000 1000 1000
 4 1000 1000 1000 1000 1000

(1) Берем пиксель на позиции (3,3) и применяем к нему вашу матрицу преобразования - т.е. умножаем пиксель изображения (i,j) на позицию матрицы (i,j). В результате получаем:

     1     2    3    4    5
 1  393  769  189    0    0
 2  349  686  168    0    0
 3  272  534  131    0    0
 4    0    0    0 1000    0

(2) Теперь находя среднее значение этого преобразования, т.е. суммируя все числа и деля на 20, мы получаем 224.5 или примерно 225. Таким образом, наше новое преобразованное изображение будет выглядеть следующим образом:

    1     2    3    4    5
 1 1000 1000 1000 1000 1000
 2 1000 1000 1000 1000 1000
 3 1000 1000  225 1000 1000
 4 1000 1000 1000 1000 1000

Чтобы получить полное смешивание с вычитанием, выполните это для каждого пикселя.

ПРАВКА: на самом деле, мне кажется, что вышеописанное может быть гауссовым размытием.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь