Уменьшение изображения с ухудшением качества изображенияJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Уменьшение изображения с ухудшением качества изображения

Сообщение Anonymous »

Я пытаюсь уменьшить изображение, а затем отобразить его на JFrame. Но это качество становится хуже. < /P>

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

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Mu {
public static void main(String[] str) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
int width = screenSize.width;
int height = screenSize.height;

System.setProperty("sun.java2d.opengl", "true");

MyFrame appwin = new MyFrame();
appwin.setSize(new Dimension(appwin.w, appwin.h));
appwin.setResizable(false);
appwin.setAlwaysOnTop(true);

Random r = new Random();
appwin.setLocation(r.nextInt(width - appwin.w), r.nextInt(height - appwin.h));
appwin.setVisible(true);
}
}

class MyFrame extends JFrame {
private static final long serialVersionUID = 1L;
BufferedImage img;
int w, h;

public MyFrame() {

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

try {
File imageFile = new File("img.jpg");
BufferedImage imgB = ImageIO.read(imageFile);

int maxSize = 500;

double scaleFactor = Math.min(
(double)maxSize / imgB.getWidth(),
(double)maxSize / imgB.getHeight()
);

w = (int)(imgB.getWidth() * scaleFactor);
h = (int)(imgB.getHeight() * scaleFactor);

img = highQualityResize(imgB, w, h);

setPreferredSize(new Dimension(w, h));
pack();
} catch (IOException exc) {
exc.printStackTrace();
System.exit(1);
}
}

@Override
public void paint(Graphics g) {
super.paint(g);
if (img != null) {

Insets insets = getInsets();
g.drawImage(img, insets.left, insets.top, w, h, this);
}
}

public static BufferedImage highQualityResize(BufferedImage src, int w, int h) {
BufferedImage resized = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = resized.createGraphics();

g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);

g2d.drawImage(src, 0, 0, w, h, null);
g2d.dispose();
return resized;
}
}
Я также использовал библиотеку Thumbnailator и библиотеку Imgscalr, но они не помогли.
исходное изображение:

Полученное изображение:

Я делаю программу в Eclipse и при создании проекта я указываю «Javase-10» в «Использование среды исполнения JRE». Может ли это быть проблемой?

Подробнее здесь: https://stackoverflow.com/questions/795 ... ge-quality
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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