Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не создается изображение на КПК и некоторых телефо, Возн. искл-ие IllegalArgumentException 
:(
    Опции темы
Iterator
Дата 20.12.2007, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



Пишу программу, которая загружает письмо с почтового сервера. На эмуляторе нормально работает, работает и на некоторых телефонах, если изображение не очень большое, а вот на  КПК ругается при создании изображения из массива, перед этим массив получается в результате декодирования из BASE64. Размер изображения определяется везде правильно.
Вот код:
Код

if (str.trim().endsWith("base64")){ // ищется изображение в тексте сообщения по наличию метки base64
                    si.setText("Найдено изображение");
                    if (DEBUG) clientPrint ("Найдено изображение");
                    int i = 22;
                    gauge.setValue(i); //индикатор сделан на скорую руку...
                    while(true){
                        str = readLine();
                        if (DEBUG) clientPrint (str);
                        if (str.trim().endsWith("-1--")){
                            if (pic!=null){
                                 gauge.setValue(500);
                                si.setText("Загрузка завершена...");
                                byte [] snap =Base64.decode(pic);    // создается массив декодированием строчки
                                 
                                si.setText("Изображение создано");
    
                                try {
                                im = Image.createImage(snap, 0, snap.length); // возникает исключение здесь
                                im = scale(im, imageForm.getWidth()-10, ((imageForm.getWidth()-10)*10)/13) ;      
                                 imageForm = new Form("Камера 1");
                                 imageForm.append(date); 
                                
                                si.setText("Изображение создано");
                                size.setText((Integer.toString(snap.length))+" байт");
                                imageForm.append(im);
                                
                                pic = null;
                                 imageForm.addCommand(backImageCommand);
                                 imageForm.setCommandListener(this);
                                 display.setCurrent(imageForm);

                                }
                                catch (Exception ex) {
                                size.setText(ex.toString());
                                }

                                
                                break;
                                }
                        }
                        else
                        {
                        pic = pic + (str); // содержит кодированное по base64 изображение
                        i = i+1;
                         gauge.setValue(22+i);
                        si.setText("Идет загрузка...");
                        }
                    }
                }


Вот функция декодирования BASE64:
Код

   public static byte[] decode(String s) {

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {

            decode(s, bos);

        }
        catch (IOException e) {
            throw new RuntimeException();
        }
        return bos.toByteArray();
    }

    public static void decode(String s, OutputStream os)
        throws IOException {
        int i = 0;

        int len = s.length();

        while (true) {
            while (i < len && s.charAt(i) <= ' ')
                i++;

            if (i == len)
                break;

            int tri =
                (decode(s.charAt(i)) << 18)
                    + (decode(s.charAt(i + 1)) << 12)
                    + (decode(s.charAt(i + 2)) << 6)
                    + (decode(s.charAt(i + 3)));


            os.write((tri >> 16) & 255);
            if (s.charAt(i + 2) == '=')
                break;
            os.write((tri >> 8) & 255);
            if (s.charAt(i + 3) == '=')
                break;
            os.write(tri & 255);

            i += 4;
        }
    }


Причем на КПК может создаваться и отображаться изображение, но только содержащее черный фон! Почему не создаются цветные изображения - не пойму. У меня 2 КПК - и везде такая фигня. Не подскажите ли в чем фигня то?
PM MAIL ICQ   Вверх
Iterator
Дата 20.12.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



Может быть дело в размере картинки? По частям его не получиться построить?
PM MAIL ICQ   Вверх
Samuil
Дата 21.12.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Iterator, Дело не в размере картинки, а в Виртуальной машине КПК. Не знаю почему но те кто пишет ВМ не включает все библиотеки, и поэтому возможно у тебя и не грузится данная прога. Также в этих веэмах отсутствует поддержка Блютуфа. Сам тестировал на Dell Axim x51v.

Добавлено через 3 минуты и 14 секунд
Скинь эту прогу я у Себя ее попробую запустить


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
VOS
Дата 24.12.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: 6
Всего: 8



Чтобы окончательно удостовериться, что decode работает правильно, я бы положил первоначальный (не BASE64) тестовый файл в jar.
В мидлете на его базе создал эталонный массив.
1) Из него создал изображение. Если нормально создастся, значит см. пункт 2, иначе надо разбираться че-там за картинки такие.
2) Получив изображение с сервера и декодировав его сравнил с эталонным полученный массив.
3) Если _вдруг_ все везде ок, надо глянуть (если это Windows Mobile на КПК) что там за версия ОС и какая Java машина стоит. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.