Я искал простой способ подкрасить изображение на Java, но я не нашел ничего, что бы соответствовало моим потребностям. Я перешел к следующему решению:Tinting Image в улучшении Java
Сначала создайте новое изображение, которое служит копией изображения, которое я хочу покрасить, затем создаю второе изображение, которое является прозрачной маской изображения, которое я хочу оттенять, а затем рисую подкраска - маска над моей копией и вернуть копию:
public static BufferedImage tintImage(Image original, int r, int g, int b){
int width = original.getWidth(null);
int height = original.getHeight(null);
BufferedImage tinted = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
Graphics2D graphics = (Graphics2D) tinted.getGraphics();
graphics.drawImage(original, 0, 0, width, height, null);
Color c = new Color(r,g,b,128);
Color n = new Color(0,0,0,0);
BufferedImage tint = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
for(int i = 0 ; i < width ; i++){
for(int j = 0 ; j < height ; j++){
if(tinted.getRGB(i, j) != n.getRGB()){
tint.setRGB(i, j, c.getRGB());
}
}
}
graphics.drawImage(tint, 0, 0, null);
graphics.dispose();
return tinted;
}
раствор для изображений, которые не имели никаких прозрачных пикселей (например, не использовать альфа - канал) было просто использовать FillRect() в целом изображение, но это не сработало на изображениях с прозрачными пикселями, а затем выбранный цвет, а не невидимый.
Кто-нибудь знает способ сделать это более эффективно, так как методы, которые я нашел здесь, были довольно неудовлетворительными, и я планирую сделать это подкрашивание на многих изображениях (большинство из них имеют оттенок серого цвета, поэтому их легко подкрашивать) во время работы около 50 раз в секунду.
Pre-Генерация всех необходимых изображений при запуске и/или кэшировании сгенерированных изображений может быть решением, но мне это кажется неудобным, хотя если ничего не поделаешь, ничего не поделаешь.
Кто-то связывает это: http://www.javalobby.org/articles/ultimate-image/
Это было полезно, но не покрывал тонировка.
Нравится? http://stackoverflow.com/a/4248459/59087 –
Уже прочитал это, и он не работает с setXORMode - он генерирует странные результаты, которые не являются предсказуемыми, и я действительно не понимаю предварительных условий, которые у него есть (черное изображение и т. д.).), чтобы использовать это правильно. – salbeira
Редактирование: хорошо прочитайте его снова, и теперь я знаю проблему: цвет XORing добавляет оттенок в пиксель и не «переопределяет» его часть на нужный цвет - поскольку такие «серые» изменяются на «белый» при применении красно-желтоватый оттенок, потому что «серый» уже имеет нагрузку 1-го в его растровом изображении rgba. (Хотя некоторые 1s должны вернуться к 0 ... так что ... я не понимаю, почему он всегда белеет). – salbeira