【问题标题】:most efficient way to set an image [closed]设置图像的最有效方法[关闭]
【发布时间】:2013-12-08 20:26:06
【问题描述】:

必须有一些更有效的方法来设置图像不是吗?或者这已经是最好的了?

     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,然后说Image myImage = ImageIcon.getImage()。没有抱怨,但是如果你有 2000 多个图像要设置,那将是很多没有一两个方法的代码(以我的世界为例吧?如果我自己这么说的话,那就是相当多的图像)。电子游戏大多只有大量图像,而不是代码有时只占代码的 30%。

【问题讨论】:

  • 您进行了基准测试吗?你知道这段代码是你应用程序的瓶颈吗?
  • 你的问题没有多大意义。您提供的代码不是“设置图像”。它正在加载图像。并且在(命名错误!)setUrl 方法中对 null 的处理很奇怪。
  • 现在说什么?我不明白基准测试或“我的应用程序中的瓶颈”是什么意思。请澄清。
  • 阅读:en.wikipedia.org/wiki/Benchmarking。还有这个en.wikipedia.org/wiki/Profiling_%28computer_programming%29。关键是,在您测量代码的实际性能之前,最好不要想办法让它运行得更快。
  • @StephenC 我知道它没有设置图像,它只是加载图像,所以让我改写一下:有没有更有效的方法来加载图像然后设置它?它实际上兼作加载器和设置器,目的是让我像这样使用它:Image Head = setImage("Head_model_01.png");

标签: java image performance processing-efficiency memory-efficient


【解决方案1】:

目前尚不清楚您在这里真正想要做什么,但 Java 教程中有一个关于处理图像的部分,其中包括 loading images 上的材料。阅读它以获取显示推荐方法的代码。

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


您的代码还有其他问题。尤其是setUrl 方法简直是奇葩。

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

  • try-catch 是不必要的。该代码中的任何内容不应该抛出 NPE。

  • 如果你去掉了不必要的try-catch,那么逻辑归结为:

        URL imgURL = getClass().getClassLoader().getResource(url);
        if (imgURL != null) {
           return imgURL;
        } else {
           return null;
        }
    

    那是疯狂/愚蠢的事情!只需这样做:

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

最后,您需要了解关于实际优化的重要一点。

众所周知,人们对程序是快还是慢,以及是什么导致它快或慢......的直觉很差。与其依靠你的直觉(即猜测问题是什么,或者将要发生什么),不如做以下事情:

  1. 让您的程序正常运行。
  2. 衡量它执行实际任务的速度。这称为基准测试
  3. 问问自己它是否已经足够快了。如果是,那就不要浪费时间进行优化。
  4. 使用分析器找出代码中的性能热点瓶颈在哪里。
  5. 优化已识别为瓶颈的代码部分。不要花时间优化不是瓶颈的代码,因为这种努力会白费。

【讨论】:

  • 所以我猜这是获取图像 URL 的有效代码?
  • 1) 我不明白“那个”是什么。 2)不要猜测。轮廓。查看我完成的答案。
  • 哇,我不敢相信它这么简单。但是,嘿,你不能对菜鸟太苛刻,可以吗? (我)毕竟我的导师指导我这样做:ntu.edu.sg/home/ehchua/programming:又一个微不足道的编程笔记
猜你喜欢
  • 2015-03-04
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
相关资源
最近更新 更多