Java 设置图像的最有效方法

Java 设置图像的最有效方法,java,image,performance,processing-efficiency,memory-efficient,Java,Image,Performance,Processing Efficiency,Memory Efficient,一定有更有效的方法来设置图像,不是吗?或者这是最好的吗 public Image setImage(String img){ ImageIcon imageIcon = new ImageIcon(setURL("Images/" + img)); Image image; image = imageIcon.getImage(); //imgWidthTemp = image.getWidth(null);

一定有更有效的方法来设置图像,不是吗?或者这是最好的吗

     public Image setImage(String img){
        ImageIcon imageIcon = new ImageIcon(setURL("Images/" + img));
        Image image;
          image = imageIcon.getImage();
          //imgWidthTemp = image.getWidth(null);
          //imgHeightTemp = image.getHeight(null);
          return image; 
     }

    public URL setURL(String url){
       String Url = url;
       try{
        URL imgURL = getClass().getClassLoader().getResource(url);
        if(imgURL != null){
           return imgURL;
        }
       }catch(NullPointerException e){}
         return null;
     }

我真的不需要
setURL()
方法,它只是让事情变得更干净、更容易处理。我只是想知道是否有一种更有效的方法来设置自定义图像。即使没有这两种方法,仍然需要编写大量代码。它变得更简单了吗?我的意思是,为什么我们不能制作一个新图像,而不是先制作一个
ImageIcon
,然后说
imagemyimage=ImageIcon.getImage()
。没有抱怨,但是如果你有2000多张图片要设置,那将是很多没有方法的代码(以minecraft为例,哈?如果我自己这么说的话,那是相当多的图片)。而视频游戏大多只有大量的图像,而不是代码,有时只有代码的30%

现在还不清楚您在这里真正想做什么,但是Java教程中有一节介绍如何处理图像,其中包括图像上的材料。请阅读其中显示推荐方法的代码

我不是这方面的专家,但我希望教程推荐的直接方法比使用
ImageIcon
的间接方法更快。(但我还没有做基准测试!!)


您的代码还有其他问题。尤其是
setUrl
方法非常奇怪

  • 名称
    setUrl
    用词不当。方法不是“设置”任何东西。相反,它试图将路径名映射到资源URL

  • 试捕是不必要的。该代码中的任何内容都不应该抛出NPE

  • 如果删除了不必要的try-catch,那么逻辑可以归结为:

        URL imgURL = getClass().getClassLoader().getResource(url);
        if (imgURL != null) {
           return imgURL;
        } else {
           return null;
        }
    
    那是疯狂/愚蠢的东西!只要这样做:

        return getClass().getClassLoader().getResource(url);
    

最后,有一点很重要,您需要了解实际优化

众所周知,人们对一个程序是快还是慢的直觉,以及是什么使它快还是慢。。。他很穷。与其依靠直觉(即猜测问题是什么或将是什么),不如做以下工作:

  • 让你的程序运行起来
  • 衡量它完成实际任务的速度。这被称为基准测试
  • 问问自己,它是否已经足够快了。如果是,那么不要浪费时间优化
  • 使用探查器找出代码中的性能热点或瓶颈所在
  • 优化已确定为瓶颈的代码部分。不要花时间优化不是瓶颈的代码,因为这样做会浪费时间

  • 你有基准测试吗?您知道这段代码是应用程序中的瓶颈吗?您的问题没有多大意义。您提供的代码不是“设置图像”。它正在加载图像。(命名错误!)
    setUrl
    方法中对null的处理非常奇怪。现在怎么办?我不明白你所说的基准测试或“我的应用程序中的瓶颈”是什么意思。请澄清。请阅读以下内容:。还有这个。关键是,在您测量了代码的实际性能之前,寻找使其运行更快的方法不是一个好主意。@StephenC我知道它不是在设置图像,只是在加载图像,所以让我重述一下:有没有更有效的方法加载图像然后再进行设置?它实际上兼作加载器和setter,我让它这样使用:
    Image-Head=setImage(“Head_model_01.png”)所以我猜这是获取图像URL的高效代码?1)我不明白“那”是什么。2) 别猜了。轮廓看我完整的答案。哇,我真不敢相信这么简单。但是,嘿,你不能对noob太苛刻,是吗?(我)毕竟我的导师把我引向了这个::又一个无关紧要的编程笔记