2012-02-14 2 views
1

У меня проблема с загрузкой изображений в J2ME
Где я могу загрузить некоторый тип изображений для j2me эмуляторе, но для некоторых это не загружает
Итак, в чем проблема? означает, какие типы изображений могут быть загружены в класс, расширяющий класс Canvas? должен ли быть определенный размер или тип изображения для загрузки?Загрузка изображений в j2me

ответ

1

Я точно не знаю, что вы ищете, но поведение, которое вы описываете, очень похоже на то, что вы испытываете исключение OutOfMemory. Попробуйте уменьшить размеры ваших изображений (использование кучи основано на измерении) и посмотреть, прекращается ли поведение. Это даст вам знать, действительно ли это проблема OutOfMemory или что-то еще.

Другие советы:

1) Загрузка изображений наибольшего к наименьшему. Это помогает с фрагментацией кучи и обеспечивает наибольшее пространство кучи для самых больших изображений. 2) Выгрузите (установите значение null) в порядке, обратном порядку загрузки и сбора мусора после этого. Убедитесь, что Thread.yield() после вызова GC. 3) Убедитесь, что вы загружаете только нужные изображения. Выгружайте изображения из состояния, в котором приложение больше не находится. 4) Поскольку вы создаете спрайты, у вас может быть несколько спрайтов для одного изображения. Подумайте о создании пула изображений, чтобы убедиться, что вы загружаете только одно изображение. Затем просто укажите каждый объект Sprite на изображение в пределах пула, который он требует. Ваш пример в вашем вопросе кажется, что вы более чем вероятно загрузите один и тот же образ в память более одного раза. Это расточительно и может быть частью проблемы OutOfMemory.

1

Я думаю, проблема одна из следующих причин:

имя

1.Resource:

Имена ресурсов чувствительны к регистру; например, /ellen-png.png - это не тот же ресурс, что и /ellen-png.PNG или любые другие варианты.

2.Format:

Единственный формат, который должен поддерживаться в PNG. Некоторые телефоны могут поддерживать другие форматы, такие как:

  • Graphics Interchange Format (GIF)
  • Joint Photographic Experts Group (JPEG, JPG)
  • для Windows или OS 2 Bitmap/(BMP)
  • Tag Image Формат файла (TIF)
  • PC Paintbrush растровый (PCX)
  • Raw подписанные данные PCM (RAW)

Но это зависит от устройства, и если вы хотите быть как можно более кросс-платформенным, просто используйте pngs:
В 1999 году, когда Sun Microsystems разработали спецификацию платформы J2ME и поддерживающие API, PNG был выбран в качестве формата изображения по умолчанию из-за его графических возможностей, небольшого размера файла и того, что он не обременен патентными проблемами.
Чтобы определить, обрабатывает ли J2ME определенный формат мультимедиа, вы вызываете метод getSupportedContentTypes. Этот метод возвращает строковый массив поддерживаемых типов носителей и включает в себя аудио- и видеоформаты вместе с форматами изображений. Строки представляют эту информацию в формате MIME-типа. Например, чтобы проверить поддержку GIF, вы просматриваете этот массив, ища строку GIF MIME-типа.Если есть совпадение, то реализация J2ME телефона поддерживает родной дисплей GIF files.This фрагмент код можно использовать для этой цели:

private String mediaTypes[]; 
private final String GIF_MIME_TYPE = "image/gif"; 
private boolean gifSupported;  

// Get the media types to check for support of GIF file display 
mediaTypes = Manager.getSupportedContentTypes(null); 
int count = mediaTypes.length; 

// Check list for GIF MIME type; set support flag if present 
gifSupported = false; 
for (int i = 0; i < count; i++) { 
    if (mediaTypes[i] == GIF_MIME_TYPE) 
     gifSupported = true; 
} // end for 

Если бы использовать специальный формат, вы можете использовать специальные декодеры для декодирования изображения из не поддерживаемого формата.
createImage throws java.io.IOException Если ресурс не существует (особенно некорректное имя ресурса), данные не могут быть загружены или данные изображения не могут быть декодированы. Поэтому, если вы поймаете это исключение, проверьте каждый случай.

3.Size:
Обратите внимание, что размеры JAR-файлы, что конкретные устройства можно загружать зависят от множества факторов, в том числе ограничений, накладываемых производителями мобильных телефонов и операторами, или даже имеющаяся конфигурацией памяти на конкретных размерах device.Image файлов должен находиться в диапазоне 9,1 Кбайт для GIF до 69,5 Кбайт для TIF. Конечно, поскольку вы, вероятно, захотите сделать их как можно меньше, вы можете попробовать использовать такой инструмент, как pngcrush. Его основная цель - уменьшить размер потока данных PNG IDAT, попробовав различные уровни сжатия и методы фильтра PNG.

Ссылки:

SDN FAQ - What image types does MIDP support?
gamedev.net - Image Formats in J2ME
drdobbs.com - Displaying GIF Images on J2ME Mobile Phones

Смежные вопросы