У меня есть 256-цветное изображение BufferedImage, на котором я хочу нарисовать другое изображение BufferedImage (> 256 цветов). Поведение Java по умолчанию заключается в сглаживании цветов, которые не могут быть представлены в модели с низким содержанием цветов. Я хочу отключить это (таким образом, выбрав следующий лучший цвет, доступный в низкоцветной модели), поэтому я попытался использовать RenderingHints, чтобы указать новое поведение рендеринга, но это не работает:
public BufferedImage filter(BufferedImage src) {
BufferedImage convertedImage = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
Graphics2D g2d = (Graphics2D) convertedImage.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
g2d.drawImage(src, 0, 0, null);
return convertedImage;
}
Идеи?
ОБНОВЛЕНИЕ:
Я решил проблему, отрисовав новое изображение попиксельно, что может быть не очень быстро, но работает. Подробности смотрите в моем ответе.