Как изменить фон изображения с прозрачными пикселями? - PullRequest
1 голос
/ 10 сентября 2009

Точный цвет фона известен.

Представьте себе сглаженный шрифт на зеленом фоне. Теперь мы хотим изменить цвет фона изображения на красный.

Итак ... Как мне извлечь «не фоновую» часть цвета из пикселя и добавить ее (или «смешать») поверх другого цвета bg впоследствии?

Мы также знаем цвет шрифта, поэтому мы знаем, какие пиксели полностью непрозрачны.

1 Ответ

2 голосов
/ 10 сентября 2009

Каждый пиксель в изображении - это либо цвет фона, либо цвет шрифта, либо их сочетание. Таким образом, вы можете указать все изображение со значениями фона RGB, значениями шрифта RGB и массивом значений от 0 до 1, где, скажем, 0 означает, что пиксель является цветом фона, 1 означает, что пиксель является цветом шрифта. Значение типа 0,1 означает, что пиксель в основном имеет цвет фона с небольшим цветом шрифта и т. Д.

Выражение типа:

blend_value = ((pixel.R - bg.R) / (font.R - bg.R)
              + (pixel.G - bg.G) / (font.G - bg.G)
              + (pixel.B - bg.B) / (font.B - bg.B)) / 3

даст вам эти значения для любого пикселя в изображении. Чтобы создать новые значения RGB с использованием нового цвета фона, используйте это значение, чтобы смешать цвет шрифта с новым цветом фона.

new_pixel.R = blend_value * font.R + (1 - blend_value) * new_bg.R
new_pixel.G = blend_value * font.G + (1 - blend_value) * new_bg.G
new_pixel.B = blend_value * font.B + (1 - blend_value) * new_bg.B
...