Java 图像出现放大

标签 java image swing graphics

我已经在java中加载了一个图像,但它看起来像是放大了,因为边缘已经消失在图像中the image

the java view

正在加载内容 我尝试了很多方法来尝试修复它。 我正在尝试用 java 制作一个基于 Windows 95 文本的冒险游戏,一切都很顺利,但上述图像加载问题。

代码如下,乱七八糟的请忽略

package com.TTG1.screen;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Game extends JFrame{

Image dbImage;
Graphics dbg;

double startTime;
double tempTime;

Thread thread = new Thread();

public Color WIN95GREEN = new Color(33, 135, 99);

public int WIDTH = 320;
public int HEIGHT = 240;
public int SCALE = 2;

public boolean boot = true;

BufferedImage bu;

BufferedImage tb;

BufferedImage d;

public Game() {
    setSize(WIDTH * SCALE, HEIGHT * SCALE);
    setVisible(true);
    setBackground(Color.white);
    setTitle("Swodniw 21");
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setStartTime();
    loopTime();

}

public void paint(Graphics g){
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    draw(dbg);
    g.drawImage(dbImage, 0, 0, this);
}

public void setStartTime(){
    if(boot){
    startTime = System.currentTimeMillis();
    System.out.println("Time Set!");
    }
}

public void draw(Graphics g){
    if(boot){
        try{
            bu = ImageIO.read(getClass().getResource("/images/load.png"));
            d = ImageIO.read(getClass().getResource("/images/desktop.png"));
        }catch(Exception e){
            e.printStackTrace();
        }
    g.drawImage(bu, 0, 0, null);
    }
    else{
        g.drawImage(d, 0, 0, null);

    }
    repaint();
}

public static void main(String[] args){
    Game game = new Game();
}

public void loopTime(){
    while(boot){
        System.out.println(tempTime - startTime);
        tempTime = System.currentTimeMillis();
        if(tempTime - startTime > 5000){
            boot = false;
            System.out.print("boot set to false");
        }
    }
}

}

最佳答案

你必须做两个技巧

  • 绘制到 ContentPane 而不是直接绘制到框架
  • 调整 ContentPane 的大小,而不是框架的大小

    public Game() {
        setContentPane(new DrawPanel());
        getContentPane().setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
        pack();
    
        ...
        //setSize(WIDTH * SCALE, HEIGHT * SCALE);
        ...
    }
    
    class DrawPanel extends JPanel {
    
        @Override
        public void paintComponent(Graphics g) {
            dbImage = createImage(getWidth(), getHeight());
            dbg = dbImage.getGraphics();
            draw(dbg);
            g.drawImage(dbImage, 0, 0, this);
        }
    }
    

关于Java 图像出现放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25548716/

相关文章:

java - 库的路径存储在 intelliJ 中的位置

R Shiny 将图片添加到带有文本的流体行中的框中

java - 在 Java Swing 中如何判断两个 JList 中哪个 JList 具有光标焦点?

java - JButton 的可互换 JComponent 外观

java - 有没有一种好方法可以在 Swing 应用程序中保留打印机设置?

java - 是否实现可迭代类型?

java - 从 Servlet/JSP 调用 Unix Shell 命令

java - 如何在 log4j html 报告中包含日期和时间列

php - 使用 AngularJS 和 PHP 将图像上传到服务器路径

c++ - C++ 中 TCP 套接字的 recv 函数