Как сделать большой палец из большого файла изображения в J2ME? - PullRequest
1 голос
/ 18 апреля 2010

Я пытаюсь отобразить большой файл изображения в приложении J2ME. Но я обнаружил, что когда файл изображения слишком велик, я даже не могу создать экземпляр Image и получить исключение OutOfMemory.

Полагаю, я могу прочитать файл изображения небольшими порциями и создать миниатюру для показа пользователю?
Есть ли способ сделать это? Или есть какой-то другой способ отображения файла изображения в приложении?
Спасибо.

1 Ответ

1 голос
/ 19 апреля 2010

Есть несколько вещей, которые можно попробовать, в зависимости от того, что именно вы пытаетесь сделать, и на каком телефоне вы хотите, чтобы ваше приложение работало.

Если ваше изображение упаковано в JAR-файл MIDlet, у вас меньше контроля над тем, что делает среда выполнения MIDP, потому что данные должны быть разархивированы, прежде чем их можно будет загрузить в качестве образа. В этом случае я бы предложил просто упаковать уменьшенное изображение. Уменьшите количество пикселей или количество байтов, используемых для кодирования каждого пикселя.

Если вы можете прочитать байты изображения из InputStream на основе GCF (файл, сеть ...), вам нужно понять формат изображения (BMP прост, JPEG меньше, так что ...), чтобы вы могли уменьшить его в изменчивый Image объект, который занимал бы меньше памяти, по одному фрагменту за раз.

В этом случае вам также необходимо решить, каким должен быть ваш алгоритм масштабирования. Превращение 32-битных пикселей в файле в 8-битные пиксели в памяти может не работать должным образом, если реализация LCDUI на вашем мобильном телефоне была написана плохо.

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

Помните, что основной LCDUI может быть не единственным способом отображения изображения на экране. JSR-184, JSR-239, JSR-226 и eSWT могут позволить вам сделать это способом, который может быть полностью независимым от реализации LCDUI вашего телефона.

Наконец, давайте посмотрим правде в глаза: если во время работы вашего телефона MIDP не позволяет вам создавать как минимум 2 изображения размером с ваш экран при полной глубине цвета одновременно, то, возможно, пришло время принять решение не поддерживать эту функцию. конкретная трубка.

...