当前位置: 首页 > 知识库问答 >
问题:

如何在运行java swing项目时修复模糊的图像

万承志
2023-03-14

我目前正在学习java swing builder作为一项新的技术技能。我需要研究如何在画布上导入图像。是的,它成功导入,图像清晰且不模糊。然而,当我运行项目时,我导入到项目中的图像会变得模糊。我不知道为什么会这样。我研究了一些功能,比如缩放,但什么都没有发生,输出结果都一样,变得模糊。

图像尺寸:250x250

以下是我在项目中实现的代码:

private Image doctor_ppe = new ImageIcon(LoginScreen.class.getResource("/assets/large.png")).getImage().getScaledInstance(250, 250, Image.SCALE_SMOOTH);


JLabel lblDds = new JLabel("");
    lblDds.setVerticalAlignment(SwingConstants.BOTTOM);
    lblDds.setHorizontalAlignment(SwingConstants.CENTER);
    lblDds.setIcon(new ImageIcon(doctor_ppe));
    lblDds.setBounds(59, 305, 236, 251);
    panel.add(lblDds);

不可运行项目和可运行项目的区别:

图像不模糊:

运行项目后图像模糊:

希望有人经历过这个,希望能对我的问题有所帮助谢谢。

共有1个答案

呼延震博
2023-03-14

然而,当我运行项目时,我导入项目的图像变得模糊。

可能是因为您的桌面使用的比例因子大于1.0,所以在绘制图像时会将其放大。

如果您想更改整个应用程序的缩放,您可以尝试:

  1. 使用命令行-Dsun。java2d。uiScale=1.0,或
  2. 使用系统编程设置。setProperty(“sun.java2d.uiScale”,“1.0”)

另一种选择可能是仅防止图标缩放:

import java.awt.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;


public class NoScalingIcon implements Icon
{
    private Icon icon;

    public NoScalingIcon(Icon icon)
    {
        this.icon = icon;
    }

    public int getIconWidth()
    {
        return icon.getIconWidth();
    }

    public int getIconHeight()
    {
        return icon.getIconHeight();
    }

    public void paintIcon(Component c, Graphics g, int x, int y)
    {
        Graphics2D g2d = (Graphics2D)g.create();

        AffineTransform at = g2d.getTransform();

        int scaleX = (int)(x * at.getScaleX());
        int scaleY = (int)(y * at.getScaleY());

        int offsetX = (int)(icon.getIconWidth() * (at.getScaleX() - 1) / 2);
        int offsetY = (int)(icon.getIconHeight() * (at.getScaleY() - 1) / 2);

        int locationX = scaleX + offsetX;
        int locationY = scaleY + offsetY;

        //  Reset scaling to 1.0 by concatenating an inverse scale transfom

        AffineTransform scaled = AffineTransform.getScaleInstance(1.0 / at.getScaleX(), 1.0 / at.getScaleY());
        at.concatenate( scaled );
        g2d.setTransform( at );

        icon.paintIcon(c, g2d, locationX, locationY);

        g2d.dispose();
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public static void createAndShowGUI()
    {
        JButton button = new JButton( "Button" );
        NoScalingIcon icon = new NoScalingIcon( new ImageIcon("box.jpg") );
        button.setIcon( icon );

        JPanel panel = new JPanel( );
        panel.add( button );

        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(panel);
        f.setSize(200, 200);
        f.setLocationRelativeTo( null );
        f.setVisible(true);
    }
}
 类似资料:
  • 问题内容: 我正在尝试在Java游戏中实现模糊机制。如何在运行时创建模糊效果? 问题答案: 请参阅/ Google“卷积滤镜”,这是一种根据周围像素值更改像素值的方法。因此,除了模糊之外,您还可以进行图像锐化和寻线。

  • 我试图建立我的Android应用程序,并得到一个关于正在使用的Gradle版本的错误。当我做出建议的更改并再次运行命令时,更改会被更改回来,导致它再次失败。 我已尝试替换对

  • 嗨,我正试图模糊背景图像,但我认为这样做是不够的。对它的任何帮助都会让我为之振奋。谢谢 这是我的CSS 我试图应用这个,但它模糊了我所有的网页安装的背景图像只。 非常感谢。

  • 我的maven项目结构: 我的问题是,我只需要运行父模块,它自动实例化子模块(tomcat服务器)。spring boot多模块项目有可能吗? 注意:我使用的是STS。父模块打包是pom,子模块打包是jar文件。 我的父pom文件 我的问题是如何使用Tomcat运行父项目?如果我运行父项目,子模块是否自动运行? 提前感谢!!!

  • 我尝试使用不同层(Web,业务,数据访问,公共)的子项目创建一个带gradle的Spring启动项目。 我按照gradle官方指南的指示创建多项目构建。 这两个子项目最初都是用Spring.io. 问题 我尝试在我的其他子项目dataAccess中使用子项目的类。导入在Intellij中运行良好。但是,当我运行时,任务失败,因为找不到: 任务:数据访问:compileJava失败。。。\dataA

  • 问题内容: 我最近将Jenkins机器上的Android SDK从rev13更新到rev15,并且不得不重做一些自定义构建内容以适应rev14中所做的更改。我在工作站上解决了这个问题,并检查了结果,希望一切都变得柔和。而是,构建失败并显示以下错误: 通过以Jenkins用户身份直接在Jenkins工作区目录中运行,并使用与Jenkins使用的相同的Android SDK,Ant和JDK,我可以成功