Я экспериментировал с Change HUE/Saturation
например найти на сайте EFG: http://www.efg2.com/Lab/Library/Delphi/Graphics/Color.htmИзменить HUE растрового изображения, но сохранить цвет фона?
Я хочу использовать методы, найденные в этом примере, чтобы изменить цветовые значения некоторых растровых изображений (для использования на TImage). Есть одна проблема, с которой я столкнулся, и это с TImages, которые имеют прозрачные растровые изображения; Я не хочу, чтобы цвет фона менял свой HUE, а скорее фактические данные изображения.
Возьмите этот образец изображения, мы можем работать с (хотя любое изображение с прозрачностью могут быть использованы):
- Скачать
Change HUE/Saturation
демку по ссылке вверху. - Загрузите изображение кнопки выше в ImageOriginal.
- Установить насыщенность дельта на 1.
- Запустите проект.
Некоторые выходные результаты:
То, что я хотел бы произойти здесь является сохранить первоначальный цвет фона (определяется в нижней левой позиции пикселя) и только регулировать цветовой тон для остальных изображения. Таким образом, результаты вывода будет выглядеть на самом деле это (редактируется в Paint.NET):
Позвольте мне использовать другой пример изображения, чтобы проверить с, который содержит больше данных изображения:
Как и раньше с первым образцом изображения, результаты могут быть чем-то вроде:
Когда результаты я хочу должен быть примерно так:
Одна идея у меня было после изменения HUE, замените в левом нижнем углу наиболее цвет с цветом от оригинала, но я не уверен, что это правильный подход или нет, и даже если я не уверен, как заменить цвет X на другой цвет. (Графика и математика вне меня).
Например, если я нарисовал два синего цвета кругов на ухо Микки (синий был оригинальный прозрачный цвет из нижней левой позиции пикселей), а также цветные глаза:
Изменение HUE снова может выглядеть следующим образом:
, когда на самом деле он хотел бы это:
Проще говоря, я хотел бы изменить HUE изображения, будь то методами, используемыми в демо-версии EFG или другом решении. Прозрачный цвет, определяемый нижним левым пикселем, не должен меняться при изменении HUE, это должно оставаться таким же, как показано на образце.
Как изменить HUE растрового изображения, сохранив цвет фона?
Отлично Sertac, который работает, как я надеялся. Не могли бы вы объяснить эту строку, хотя пожалуйста: 'FixColor: = PRGBTripleArray ( ImageOriginal.Picture.Bitmap.ScanLine [Bitmap.Height - 1])^[0];' Это эквивалентно использованию пикселей [], но быстрее? Я не уверен, что делает бит [0]. –
@Blobby - Вы действительно можете удалить '^', это не нужно (что указывает PRGBTripleArray, но компилятор может разрешить его без «^»), левая часть - TRGBTripleArray, поэтому [0] - это первый элемент массива. Скорость не важна, так как мы читаем только один пиксель, вы можете очень хорошо использовать пиксели. –
Огромное спасибо за очищение. Я думаю, что я понимаю и другой код: 'if (RowIn [i] .rgbtBlue = FixColor.rgbtBlue) и' .. это проверка цвета каждого пикселя в канале RGB, и если каждый из компонентов RGB равен FixColor вы конвертируете его в FixColor? –