Проблема Image.createImage в J2ME - PullRequest
0 голосов
/ 07 ноября 2008

Я пробовал это на J2ME

try {
    Image immutableThumb = Image.createImage( temp, 0, temp.length);
} catch (Exception ex) {
    System.out.println(ex);
}

Я нажал эту ошибку: java.lang.IllegalArgumentException:

Как мне решить эту проблему?

Ответы [ 4 ]

1 голос
/ 07 ноября 2008

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

1 голос
/ 13 декабря 2008

Давайте посмотрим на документы: IllegalArgumentException выбрасывается

если imageData неправильно отформатирован или не может быть декодирован иным образом

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

1 голос
/ 07 ноября 2008

Image.createImage () генерирует исключение IllegalArgumentException, если первый аргумент неверно отформатирован или не может быть декодирован иным образом. (Я предполагаю, что temp является байтом []).

http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/Image.html#createImage(byte[],%20int,%20int)

(Этот URL по какой-то причине отказывается от гиперссылки (?))

0 голосов
/ 17 марта 2010

У меня просто была такая же проблема с моим MIDLET, и проблема в моем случае заключалась в заголовке HTTP, который идет вместе с изображением JPEG, которое я читал из InputStream сокета. И я решил это, найдя маркер SOI JPEG, который идентифицируется двумя байтами: FFD8 в моем байтовом массиве. Затем, когда я нахожу местоположение FFD8 в моем байтовом массиве, я обрезаю начальные байты, которые представляют заголовок HTTP, и затем я могу вызвать createImage() без каких-либо исключений ...

Вам следует проверить, так ли это с вами. Просто проверьте, действительно ли это (temp[0] == 0xFF && temp[1] == 0xD8), и если это не так, обрежьте начало temp, чтобы удалить заголовок HTTP или другой мусор ...

приписка Я предполагаю, что вы читаете изображение JPEG, если нет, поищите соответствующий заголовок в массиве temp.

Также, если это не помогает, и вы читаете JPEG-изображение, убедитесь, что массив начинается с FFD8 и заканчивается FFD9 (который является маркером EOI). И если это не заканчивается ВЗ, просто обрежьте конец, как я объяснил для СОИ ...

P.P.S И если вы обнаружите, что данные в temp действительны, то ваша платформа не сможет декодировать изображения JPEG, или изображение в temp слишком велико для декодера JPEG.

...