Код: Выделить всё
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;
}
}
исходное изображение:
Полученное изображение:
Я делаю программу в Eclipse и при создании проекта я указываю «Javase-10» в «Использование среды исполнения JRE». Может ли это быть проблемой?
Подробнее здесь: https://stackoverflow.com/questions/795 ... ge-quality