Java 如何停止JLabel缩放图像?
我有一个Swing应用程序,可以通过将图像加载到Java 如何停止JLabel缩放图像?,java,swing,java-9,image-scaling,highdpi,Java,Swing,Java 9,Image Scaling,Highdpi,我有一个Swing应用程序,可以通过将图像加载到JLabel中来显示图像。在Java8之前,这种方法工作得很好。自从Java 9以来,有一些变化旨在使应用程序在更高的像素密度下调整大小,包括重新缩放图像:当像素密度较高时,图像会被放大。结果在很多情况下都很糟糕。举个例子,如果我有一张高像素数的照片,我的应用程序会缩小它以适应可用空间,但随后它会自动缩小以允许更高的像素密度-丑陋 我可以看到几个避免此问题的选项: 实现接口java.awt.image.MultiResolutionImage,这看
JLabel
中来显示图像。在Java8之前,这种方法工作得很好。自从Java 9以来,有一些变化旨在使应用程序在更高的像素密度下调整大小,包括重新缩放图像:当像素密度较高时,图像会被放大。结果在很多情况下都很糟糕。举个例子,如果我有一张高像素数的照片,我的应用程序会缩小它以适应可用空间,但随后它会自动缩小以允许更高的像素密度-丑陋
我可以看到几个避免此问题的选项:
java.awt.image.MultiResolutionImage
,这看起来应该会有所帮助,但我不知道如何使用JLabel
import java.awt.*;
import javax.imageio.*;
import javax.swing.*;
import java.io.*;
public class Img extends JFrame {
public static void main( String[] args ) throws IOException {
new Img( new File( args[0] ) );
}
private Img( File file ) throws IOException {
super( "Img: " + file.getName () );
ImageIcon img = new ImageIcon( ImageIO.read( file ) );
JLabel label = new JLabel( img );
label.setPreferredSize( new Dimension( img.getIconWidth(), img.getIconHeight() ) );
add( label );
setDefaultCloseOperation( EXIT_ON_CLOSE );
pack();
setVisible( true );
}
}
如果我有一张高像素的照片,我的应用程序会将其缩小以适应可用空间-请查看。它将动态缩放。无论使用100%还是150%,我都能看到相同大小的图像。也就是说,无论哪种方式,图像都会填满屏幕。当然,如果图像比屏幕小,那么我仍然会遇到放大问题。如果我有一张像素数高的照片,我的应用程序会缩小它以适应可用空间-请查看。它将动态缩放。无论使用100%还是150%,我都能看到相同大小的图像。也就是说,无论哪种方式,图像都会填满屏幕。当然,如果图像比屏幕小,那么我仍然会遇到放大问题。