Проблема при загрузке большого изображения в устройство Samsung (игра J2me) - PullRequest
0 голосов
/ 06 сентября 2011

Когда я пытаюсь загрузить большое изображение (1440 * 400) в устройство Samsung. Своя ошибка показа java. Но в нокии работает нормально. Размер изображения bg1.png составляет всего 3 КБ

.

Пример кода

  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();
    }
}

Показывает ошибку игры в Samsung. Как решить эту проблему

Я тоже пытаюсь с этим примером

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 ]

1 голос
/ 07 сентября 2011

Основная причина описываемой вами проблемы - ограниченность ресурсов мобильных устройств.

Если вы собираетесь использовать широкий спектр устройств, в том числе бюджетных, вам просто нужно научиться жить с этим.

Например, минимальные требования к памяти согласно спецификации MIDP 2 (JSR 118) указаны следующим образом ( источник ):

  • 256 килобайт энергонезависимой памяти для реализации MIDP, сверх того, что требуется для CLDC.
  • 8 килобайт энергонезависимой памяти для постоянных данных, создаваемых приложением
  • 128 килобайт энергозависимой памяти для среды выполнения Java (например, кучи Java)

Теперь давайте посмотрим на ваши изображения с этой точки зрения. Помните, что в MIDP пиксель ARGB занимает 4 байта.

    Image.createImage(600,400)

Приведенное выше дает нам 600x400x4=960000 байтов, 960 килобайт , т.е. значительно выше требований к памяти. Было бы вполне законно, если бы MIDP 2-совместимое устройство выдавало за это OOME.

Что касается PNG файла изображения, занимающего 3 килобайта, обратите внимание, что PNG является сжатым форматом. Устройствам с недостаточной вычислительной мощностью может потребоваться распаковать png-изображение для работы с ним, что может привести к тому, что его размер превысит предел памяти.

0 голосов
/ 09 сентября 2011

Вы попробуете это:

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

Это не работает, лучше изменить размер изображения в зависимости от высоты и ширины экрана устройства.

...