Сглаживание буферизованного изображения Java не работаетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сглаживание буферизованного изображения Java не работает

Сообщение Anonymous »

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

Код: Выделить всё

//I've tried every kind of interpolation, but to no avail
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Однако, похоже, это не влияет на изображения. Мне было интересно, есть ли способ сделать их более плавными.
В моем приложении:
[img]https: //i.sstatic.net/OlcEjLz1.png[/img]

В средстве просмотра фотографий vs code в масштабе 10 % (примерно тот же размер)
Изображение
Любая помощь приветствуется!
ПРИМЕЧАНИЕ. Проблема возникает только при уменьшении масштаба изображений. Отображение изображения с разрешением 256x256 и размером 256x256 пикселей работает совершенно нормально.
РЕДАКТИРОВАТЬ: Вот минимально воспроизводимый пример, показывающий, что интерполяция/сглаживание не имеет значения:

Код: Выделить всё

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 400);

final BufferedImage image = ImageIO.read(new File("home.png"));

JPanel pane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2d = (Graphics2D) g;

g2d.setColor(Color.gray);
g2d.fillRect(0, 0, 400, 400);

//two examples, image on the left is without interpolation, image on the right is with interpolation
g2d.drawImage(image, 200, 200, 35, 35, null);

g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawImage(image, 250, 200, 35, 35, null);
}
};

frame.add(pane);
frame.setVisible(true);
Программа использует это изображение:
https://imgur.com/6xto1o5
Результат следующий:< /p>
Изображение

Дом слева нарисован без интерполяции/анти. псевдонимы, изображение справа с обоими. Как видите, видимой разницы нет.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ot-working
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»