Обработка тонирующих изображений на Android - PullRequest
2 голосов
/ 06 марта 2012

Я пытался следовать Обработка изображений - Учебное пособие по тонированию цвета (еще один) , но я не понимаю часть кода.Я знаю только одно, что степень влияет на количество тоновых цветов.Не могли бы вы объяснить это мне?

Вот код, который я не понимаю:

                int index = y * width + x;
                int r = ( pix[index] >> 16 ) & 0xff;
                int g = ( pix[index] >> 8 ) & 0xff;
                int b = pix[index] & 0xff;
                RY = ( 70 * r - 59 * g - 11 * b ) / 100;
                GY = (-30 * r + 41 * g - 11 * b ) / 100;
                BY = (-30 * r - 59 * g + 89 * b ) / 100;
                Y  = ( 30 * r + 59 * g + 11 * b ) / 100;
                RYY = ( S * BY + C * RY ) / 256;
                BYY = ( C * BY - S * RY ) / 256;
                GYY = (-51 * RYY - 19 * BYY ) / 100;

1 Ответ

1 голос
/ 07 марта 2012

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

            int r = ( pix[index] >> 16 ) & 0xff;
            int g = ( pix[index] >> 8 ) & 0xff;
            int b = pix[index] & 0xff;

Бит кода выше просто получает собственные значения красного, синего и зеленого.

            RY = ( 70 * r - 59 * g - 11 * b ) / 100;
            GY = (-30 * r + 41 * g - 11 * b ) / 100;
            BY = (-30 * r - 59 * g + 89 * b ) / 100;

Они возвращаются обратно впозже, но обратите внимание, что RY будет в основном красным, BY в основном синим, а GY будет смесью зеленого и красного.Одной из ключевых особенностей является то, что все 3 множителя складываются в 0, сохраняя нейтральность коррекции (изображение не станет ярче).GY на самом деле не имеет значения, так как он не используется нигде в коде.

            Y  = ( 30 * r + 59 * g + 11 * b ) / 100;
            RYY = ( S * BY + C * RY ) / 256;
            BYY = ( C * BY - S * RY ) / 256;
            GYY = (-51 * RYY - 19 * BYY ) / 100;

Опять же, просто применяя формулу для получения желаемых эффектов тонирования.S и C - это значения Sin и Cos для угла, переданного в функцию, как она вызывается.Оттенок зависит от пройденного угла.Под углом 0 изображение будет ближе к нормальным цветам, так как угол меняется, он будет стремиться изменить красный на синий, синий на красный, и зеленый будет некой комбинацией двух, в основном зависящих от красного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...