在三星设备(J2me游戏)中加载大图像时出现问题

时间:2011-09-06 13:49:39

标签: java exception java-me midp

当我尝试在Samsung设备中加载大图像(1440 * 400)时。它显示java错误。但在诺基亚运行正常。 bg1.png图像大小仅为3kb

示例代码

  Image bg;

   try {

           bg=Image.createImage(("/Bg1.png"));

        } 
     catch (IOException ex) {

            ex.printStackTrace();

        }

在运行方法

public void run(){

    Graphics g=getGraphics();

    while(true)
    {

        g.drawImage(bg, 0, getHeight()-bg.getHeight(),0);
         flushGraphics();
    }
}

它在三星显示游戏错误。如何解决这个问题

我也尝试使用这个例子

Image source;
    source = Image.createImage(600,400);  
            g=getGraphics();
           bg=Image.createImage("/res/bg1.png");

如果我使 Image.createImage(700,400) Image.createImage(600,500)它在模拟器中显示内存不足错误。如果该值小于或等于 1000 则表示其工作正常。我不明白这个问题是什么?

2 个答案:

答案 0 :(得分:1)

您描述的问题的主要原因是移动设备的资源有限。

如果您要定位各种设备,包括低端设备,您只需要学习如何使用它。

例如,每个MIDP 2(JSR 118)规范的最低内存要求如下所述(source):

  • 用于MIDP实现的256千字节非易失性存储器,超出了CLDC的要求。
  • 用于应用程序创建的持久数据的8千字节非易失性内存
  • 用于Java运行时的128千字节易失性内存(例如,Java堆)

现在让我们从这个角度看看你的图像。请记住,在MIDP中,ARGB像素占用4个字节。

    Image.createImage(600,400)

上面给我们600x400x4=960000个字节, 960千字节,远远超出了内存要求。 MIDP 2兼容设备为此投掷OOME是完全合法的。

关于占用3千字节的PNG图片文件,请注意PNG是压缩格式。处理能力不足的设备可能需要解压缩png图像才能使用它,这可能会使其大小超出内存限制。

答案 1 :(得分:0)

你试试这个:

 bg=Image.createImage(("/Bg1.png")).scaled(getWidth(),getHight());

这不起作用,您最好根据设备屏幕的高度和宽度更改图像大小。