2008-11-07 2 views
0

Я попробовал это на J2MEпроблема Image.createImage в J2ME

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

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

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

+0

Если вы включаете более конкретную информацию, например. трассировки стека или сообщения об исключении, возможно, будет предоставлен ответ. – Ruben 2008-11-07 10:16:06

ответ

1

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

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

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

1

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

1

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

if imageData is incorrectly formatted or otherwise cannot be decoded

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

0

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

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

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

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

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

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