JAVA: замените один цвет другим, используя ColorModel - PullRequest
1 голос
/ 27 марта 2012

Мне нужно заменить один цвет белым на изображении.Я читал о ColorModel и RGBImageFilter.substituteColorModel, но я не очень хорошо понимаю.

Цвет, который я хочу заменить: R: 113 G: 75 B: 96

И, конечно, белый - 255,255,255.

Если вы можете дать прямое решениебудет здорово, но если нет, то немного пояснений о том, как это сделать, тоже будет здорово.Я не хочу только решения, я хочу понять, как и почему.

Большое спасибо.

1 Ответ

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

В моей компании нам приходится часто переключаться на встроенные дисплеи.Мы используем индексированные растровые изображения, чтобы выполнить то, о чем вы говорите.Основная идея состоит в том, чтобы переключить палитру для заданного индекса, чтобы получить различный внешний вид.

Идея с индексированным растровым изображением заключается в том, что в палитре имеется 256 цветов.Вы можете назначить любые значения RGB, которые вы хотите, каждому слоту в палитре.Само изображение представляет собой просто список индексов в палитре (один байт на пиксель).Это действительно здорово на платформе с ЦП и хранилищем (где вы не можете распаковать изображения и не можете сэкономить место для полноцветных растровых изображений).Вы можете создавать альтернативные палитры (зеленые, желтые, красные и т. Д.).Вы просто переключаете палитру, и графика выглядит совершенно иначе.Мы используем это для создания действительно хороших градиентов на виджетах, которые могут переключать цвет без необходимости переносить каждое состояние кнопки.

Чтобы решить вашу конкретную проблему с индексированными растровыми изображениями, вам нужно просто переключить палитры и убедиться, что вв одной палитре индекс был (113,75,96), а во второй - тот же индекс (255,255,255).

IndexColorModel - хорошее место для начала в AWT.

Удачи!

...