为什么我的现有图像不会被吸引到屏幕上?

时间:2015-11-24 13:26:13

标签: java graphics bufferedimage

基本上就是这笔交易,我试图从项目中的源文件加载图像,但每当我运行代码时都没有任何反应。

任何人都可以了解我出错的地方,也许还有可能​​如何让它正确绘制?

以下是代码:

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


public class EnterTile extends Tile {

public EnterTile() {
    setTile();
}

public void setTile() {

    try {
        BufferedImage img = ImageIO.read(new File("res\\BrokenFenceSwamp.gif"));
        Graphics g = img.getGraphics();
        g.drawImage(img, 1000, 1000, 8, 8, null);
    } catch (IOException e) {
        System.out.println("Error " + e);
    }
}

public static void main(String args[]) {
    EnterTile enterTile = new EnterTile();


}



}

感谢您花时间阅读本文。

2 个答案:

答案 0 :(得分:1)

要正确加载图像,您需要:

  1. res 文件夹(存储图像的位置)标记为资源文件夹。
  2. 当您调用ImageIO的 read()方法时,您需要传递一个URL。为此,您需要使用 {className} .class.getResource( {path} (在您的情况下 ImageIO.read(EnterTile.class.getResource("/BrokenFenceSwamp.gif"));
  3. 要绘制图像,您需要指定位置。 E.g。如果您使用的是awt库。您可以尝试这样的事情:

    public class Main {
        public static void main(String[] args) throws IOException {
            JFrame frame = new JFrame("Image Test");
            frame.setSize(400, 800);
            frame.setVisible(true);
            frame.setFocusable(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setResizable(false);
    
            Canvas canvas = new Canvas();
            canvas.setPreferredSize(new Dimension(400, 800));
            canvas.setMaximumSize(new Dimension(400, 800));
            canvas.setMinimumSize(new Dimension(400, 800));
    
            frame.add(canvas);
            frame.pack();
    
            canvas.createBufferStrategy(2);    
            BufferStrategy bs = canvas.getBufferStrategy();
    
            Graphics g = bs.getDrawGraphics();
            g.clearRect(0, 0, 400, 800);
    
            String path = "/BrokenFenceSwamp.gif";
            BufferedImage image = ImageIO.read(Main.class.getResource(path));
    
            g.drawImage(image, 0, 0, null);
    
            bs.show();
            g.dispose();
        }
    }
    

答案 1 :(得分:1)

获取图像的图形是一种能够在图像上绘图的工具:

    BufferedImage img = ImageIO.read(new File("res\\BrokenFenceSwamp.gif"));

    Graphics g = img.getGraphics();
    g.drawString(img, 100, 100, "Hello World!");
    g.dispose();

    ImageIO.write(new File("res/TitledBFS.gif"));

它不会在屏幕上绘制。 Graphics可以是内存(此处),屏幕或打印机。

要在屏幕上绘图,可以创建一个没有标题和边框的全屏窗口,在其背景上绘制图像。

这需要熟悉swing或更新的JavaFX。