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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование камеры телефона в J2ME приложении, Проблемы с получением скриншотов 
V
    Опции темы
mdsoul
Дата 22.8.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!

Столкнулся со следующей проблемой: необходимо получить скриншоты максимального размера, какой только обеспечивает камера. Как узнать, какой размер максимаьный в конкретном устройстве я так и не понял (если кто подскажет, буду крайне признателен), поэтому остановаился на разрешении 480х640. Не знаю, как это делается по науке, но я поступил следующим образом - в качестве видеоискателя использую player с разрешением, устанавалиаемым по умолчанию 
Код

player = Manager.createPlayer("capture://video");

В момент снимка создаю новый плеер с нужным мне разрешением
Код

player = Manager.createPlayer("capture://video?width=480&height=640");


Полный код приведен ниже.
На эмуляторе все прошло вроде как нормально. Как только загрузил приложение на телефон (SE K750), вылезла проблема: 
javax.microedition.media.MediaException: Cannot create a DataSource for: null

Насколько я понял, аппарат не воспринимает какие-либо параметры (?width=480&height=640).

Код работающий, стоит только убрать злополучные "?width=480&height=640".

Поделитесь соображениями как с этим бороться. Заранее благодарен отозвавшимся.

Код

import javax.microedition.media.control.VideoControl;
import javax.microedition.media.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;


class FormX extends Form implements Runnable
{
    private Player player;
    private VideoControl vc;
    private Image result = null;
    public  byte[] pictureInBytes = null;
    private MIDlet m = null;
    private String saveParams = null;

    
    public FormX()
    {
        super("Фотографирование");

        init();
    }

    private void init()
    {
        try
        {
            player = Manager.createPlayer("capture://video");
            player.realize();
            vc = (VideoControl)player.getControl("VideoControl");
            
            if(vc != null)
            {
                Item item;
                (item = (Item)vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null)).setLayout(3);
                super.append(item);
                player.start();
            }
            vc.setVisible(true);
        }
        catch (Exception e)
        {
            super.append(e.toString());
            System.out.println("init(): " + e);
            e.printStackTrace();
        }
    }

    public void capture(MIDlet m, String saveParams)
    {
        System.out.println("capturing");
        this.m = m;
        this.saveParams = saveParams;
        
        Thread t = new Thread(this);
        t.start();
    }
    
    public void run()
    {
        System.out.println("thread started");
        try
        {
            player.close();
            while (player.getState() != Player.CLOSED)
            {
            }
            System.out.println("previous player closed");

            player = Manager.createPlayer("capture://video?width=480&height=640");
            System.out.println("new player created");
            player.realize();
            System.out.println("new player realized");
            vc = (VideoControl)player.getControl("VideoControl");
            System.out.println("new video control created");
            
            if(vc != null)
            {
                Item item;
                vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null);
                player.start();
            }
            System.out.println("new played started");
            pictureInBytes = vc.getSnapshot(null);
            System.out.println("snap length is: " + pictureInBytes.length);
            
            Alert al = new Alert("Выполнено", FSManager.savePicture(pictureInBytes, saveParams), null, AlertType.INFO);
            al.setTimeout(2000);
            Display.getDisplay(m).setCurrent(al);
        }
        catch (Exception e)
        {
            System.out.println("capture(): " + e);
            e.printStackTrace();
        }
    }

    public void stop()
    {
        try
        {
            player.stop();
        }
        catch (Exception e)
        {
            System.out.println("stop(): " + e);
        }
    }
}


Это сообщение отредактировал(а) mdsoul - 22.8.2007, 11:49
PM MAIL   Вверх
W0LF
Дата 22.8.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



я снапшот брал с максимальным разрешением а потом масштабировал.. быть может и неправильно, но тогда пришлось сделать так


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
mdsoul
Дата 22.8.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хорошо, тогда как узнать какое разрешение максимальное для конкретной модели и почему аппарат ругается на параметры "?width=480&height=640"?
PM MAIL   Вверх
Antropoid
Дата 22.8.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Код

System.getProperty("video.snapshot.encodings");


Код

getSnapshot("encoding=bmp&width=640&height=480");



--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
W0LF
Дата 22.8.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Цитата(Antropoid @  22.8.2007,  16:58 Найти цитируемый пост)
getSnapshot("encoding=bmp&width=640&height=480");

так вроде не получалось :(


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Antropoid
Дата 22.8.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Мож потому, что девайс не поддерживает формат, или разрешение. Я ж говорю
Код

System.getProperty("video.snapshot.encodings");

сначала надо юзать.


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
W0LF
Дата 22.8.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



формат точно поддерживал. .а вот разрешение вполне может ты и прав..
просто давно было - непомню smile


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
mdsoul
Дата 23.8.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Antropoid @ 22.8.2007,  16:58)
Код

System.getProperty("video.snapshot.encodings");


Код

getSnapshot("encoding=bmp&width=640&height=480");

Таким образом у меня ничего не вышло - снова Unsupported parameters.

У кого-нибудь есть мысли как сделать скриншот нестандартного размера? Стандартные 120х160 меня не устраивают.
PM MAIL   Вверх
Antropoid
Дата 23.8.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Я тебе дал намек, а не четкий алгоритм...
Что выдает твой девайс на
Код

System.getProperty("video.snapshot.encodings");

?


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
mdsoul
Дата 23.8.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я дурак! Что тут ещё сказать.

На аппарате мидлет выдал следующую строчку
encoding=jpeg&width=120&height=160 encoding=jpeg&width=480&height=640 encoding=jpeg&width=960&height=1280 encoding=jpeg&width=1224&height=1632

Таким образом плеер создается стандартным "конструктором без параметров", а именно
Код

player = Manager.createPlayer("capture://video");

после чего можно делать фотографии с одним из наборов параметров, полученных с помощью
Код

System.getProperty("video.snapshot.encodings");


Пытаться получить снимок без первого параметра, как я в общем-то и пытался, не стоит.

Всем спасибо за внимание и особенно за помощь. Игорь.

Это сообщение отредактировал(а) mdsoul - 23.8.2007, 12:30
PM MAIL   Вверх
Antropoid
Дата 23.8.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



O! Молоток, шо сам разобрался  smile 
Я это фсе и имел ввиду, когда так лаконично писал  smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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