Основная причина описываемой вами проблемы - ограниченность ресурсов мобильных устройств.
Если вы собираетесь использовать широкий спектр устройств, в том числе бюджетных, вам просто нужно научиться жить с этим.
Например, минимальные требования к памяти согласно спецификации 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-изображение для работы с ним, что может привести к тому, что его размер превысит предел памяти.