【问题标题】:Loading a Buffered Image加载缓冲图像
【发布时间】:2014-03-20 15:59:26
【问题描述】:

我这几天一直在尝试解决这个问题。我正在尝试从我的 res 目录加载缓冲图像。我的文件夹层次结构是。

  • 主项目文件夹
    • 资源
      • 我要加载的图片
      • 逻辑文件夹
        • loop.java(我的类将字符串传递给BufferedImageLoader进行加载)
      • 图形文件夹
        • BufferedImageLoader.java(将字符串转换为缓冲图像)

但是,我不断收到 input = null 错误。如何指向我的图像文件?

我的循环课

BufferedImageLoader loader = new BufferedImageLoader();
    try{
        spriteSheet = loader.loadImage("/res/sprite_sheet_test.png");

    }catch(IOException e){
        e.printStackTrace();
    }

我的 BufferedImageLoaderClass

public BufferedImage loadImage(String path)throws IOException{
    url = this.getClass().getResource(path);
    image = ImageIO.read(url);
    newImage = new BufferedImage(image.getWidth(), image.getHeight(),
            BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = newImage.createGraphics();
    g.drawImage(image, 0, 0, null);
    g.dispose();
    return newImage;
}

感谢您的帮助!!

【问题讨论】:

  • 请用堆栈跟踪更新问题!另外,您确定要将图像作为文件加载吗?将res/ 放在类路径中并作为资源(getClass().getResource(path_without_res_prefix)) 加载通常更容易。谷歌或搜索类似的问题。
  • 我是 java 新手,但仍在学习。我可以像你说的那样加载图像。通过使用 url =this.getClass().getResource(path) 但是,我将在字符串路径中放入什么来指向包含我的图像的文件夹?

标签: path bufferedimage


【解决方案1】:

鉴于文件夹 res 被定义为项目中的资源文件夹并放在类路径中(实际上,包含文件 sprite_sheet_test.png),这应该可以工作:

loader.loadImage("/sprite_sheet_test.png");

注意前导/,以确保图像是从资源根目录加载的。没有它,资源将相对于 BufferedImageLoader 类的包进行解析。

【讨论】:

  • 如果我声明绝对路径
  • @seiko149 如果它不起作用,那是因为res 不是你的类路径的一部分。
  • 我通过将资源文件夹添加到类路径中使其在 Eclipse 中工作。但是,当我尝试在命令行中编译它或导出到可运行的 jar 时,图像不会加载。我认为我需要对如何声明路径进行更多研究。感谢您帮助它运行。
  • @seiko149 好!别客气。 :-) 您需要将该图像作为 JAR 的一部分。请记住,资源是相对于 JAR 的“根”解析的。我认为在 StakcOverflow 上已经有一些关于如何实现这一点的答案。
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2011-02-22
  • 1970-01-01
  • 2011-03-31
  • 2011-01-22
相关资源
最近更新 更多