Acesso a camera viq j2me

Pessoal,

Fiz uma aplicação de teste para testar os recursos de camera via j2me e não to conseguindo rodar no emulador s40 6th da nokia, eu checo se ele tem os recursos habilitados e ele tem tudo, porém quando vou criar o player ele lança exceção:

javax.microedition.meda.MediaException: invalid locator: capture://video

Pedaço do código:

player = Manager.createPlayer("capture://video");
player.realize();
videoControl = (VideoControl) player.getControl("VideoControl");
Canvas canvas = new VideoCanvas(this, videoControl);
     byte[] photo = videoControl.getSnapshot(null);
     Image image = Image.createImage(photo, 0, photo.length);

Na versão mais antiga (s40 5th) funcionou ±, ficou uma tela preta, mais conseguiu tirar uma foto, bem, será que alguem já utilizou esses recursos com o emulador mais novo da nokia s40 6th??? aguardo uma força, valeu pessoal

Torquato,

Não sei neste emulador, mas porque não tenta no WTK ? lá eu tenho certeza que funciona pois já fiz.

[i]"Ct = Content Type

Para saber quais os protocolos uma kvm suporta, deve-se utilizar o método getSupportedProtocols(String contentType) que retorna um String array. Se você usar esse método com o CT ?audio/x-wav? vai retornar com três valores: http, file and capture no wireless toolkit. Esses protocolos permitem ao desenvolvedor saber quais protocolor podem ser utilizados para adquirir um determinado recurso. O desenvolvedor ainda pode recuperar uma lista de CT a partir de um determinado protocolo. O método getSupportedContentTypes(String protocol)realiza essa função, logo se você passar o parâmetro “capture” o método retorna audio/x-wav e video/vnd.sun.rgb565 para o wireless toolkit. Se você passar null para esses métodos vai retornar todos os CTs e/ou protocolos que uma KVM suporta.

Mais informações disponíveis em: http://today.java.net/pub/a/today/2005/09/27/j2me4.html
Fonte: http://danielaugusto.wordpress.com/2007/09/11/streaming-em-j2me/
"
[/i]

Espero que isto te ajude
Att,
Ricoldi

Ola,

Tentei implementar o acesso a camera no LG KP570.
Mas mesmo com alguns exemplos na net não consegui faze-lo com sucesso.

Alguém poderia me ajudar…

Vlw

rodi

Seja bem vindo… Mas a questão é… qual o seu problema, ou duvida?

[quote=ricoldi]rodi

Seja bem vindo… Mas a questão é… qual o seu problema, ou duvida?[/quote]

Ricoldi,

Primeiro problema: Quando solicito a abertura da camera da esse erro.
Erro> IllegalArgumentException container needs to be a canvas

Segundo problema: Quando eu conseguir abrir a camera, como leio a foto tirada?
Vou pegar a foto e ler o QR-CODE. Vou usar o qr-code API.

package principal;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Item;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class carregarArquivos{
	public static String regUser = null;
	public static String retorno = null;
	private Form fmMain;

	public carregarArquivos() {
		fmMain = new Form("Imagem");
		VideoControl vc = null;
		try {
			System.out.println("Abrindo Camera");
			Player p = Manager.createPlayer("capture://video");
			System.out.println("Carregando Camera");
			p.realize();
			System.out.println("Carregando controles");
			vc = (VideoControl) p.getControl("VideoControl");

			vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, Entrega.app);

			try {
				vc.setDisplayLocation(2, 2);
				vc.setDisplaySize(vc.getDisplayWidth()- 4, vc.getDisplayHeight() - 4);
			} catch (MediaException me) {
				try {
					vc.setDisplayFullScreen(true);
				} catch (MediaException me2) {
				}
			}
			p.start();
			fmMain.append((Item) vc.initDisplayMode(
					GUIControl.USE_GUI_PRIMITIVE, Entrega.app));
		} catch (Exception e) {
			fmMain.append("Erro: " + e);
		}
		System.out.println("Inserir na tela");
		Display.getDisplay(Entrega.app).setCurrent(fmMain);
		
		byte[] photo = null;
		try {
			photo = vc.getSnapshot(null);
		} catch (MediaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
		Image image = Image.createImage(photo, 0, photo.length); 
		System.out.println(image);
	}
	
	public static void setRegUser(String user) {
		regUser = user;
	}

	public static String getRegUser() {
		return regUser;
	}

	public static void setRetorno(String ret) {
		retorno = ret;
	}

	public static String getRetorno() {
		return retorno;
	}

}

Obrigado…

Aqui você cria um videocontrol com DirectVideo, depois faz um monte de configuração que não tem ideia de pra que serve (já que pegou da internet)

vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, Entrega.app);

e depois cria outro videocontrol só que em GuiPrimitive, para que o primeiro então?

fmMain.append((Item) vc.initDisplayMode(GUIControl.USE_GUI_PRIMITIVE, Entrega.app));

leia a documentação da classe VideoControl e veja que o erro diz que este objeto só pode estar em uma classe canvas e não form:
http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/control/VideoControl.html

Sempre saiba o que são os parametros de um método, pois acima você não se preocupou com isso, por isso os erros e abaixo tambem não:

photo = vc.getSnapshot(null);

“Get a snapshot of the displayed content. Features and format of the captured image are specified by imageType. Supported formats can be queried from System.getProperty with video.snapshot.encodings as the key. The first format in the supported list is the default capture format.”

Outra coisa é não usar conversão sem ter certeza que o objeto faz parte daquele tipo, só serve para não dar erro na compilação, mas não garante que um objeto vai virar outro (talvez se usar a api jmiracle, funcione!).

Nunca trabalhei com QR, mas se ela aceitar byte[] você já tem, e se ela aceitar Image, você já tem tb.

byte[] photo;
Image image; 

Acho que com isso já consegue fazer esse codigo funcionar.

Valew Ricoldi,

Na realidade não sei exatamente quais os parametros, por que testei do jeito que achei em um tutorial na net.
Eu tava tentando descobrir o que era cada parametro.

Esses paremetros eu sei que é pra setar o tamanho e a posição da camera.

Acho que vou precisar pesquisar sobre canvas melhor.

Vlw

[quote=rodi_ramos]Valew Ricoldi,

Na realidade não sei exatamente quais os parametros, por que testei do jeito que achei em um tutorial na net.
Eu tava tentando descobrir o que era cada parametro.

Esses paremetros eu sei que é pra setar o tamanho e a posição da camera.

Acho que vou precisar pesquisar sobre canvas melhor.

Vlw

[/quote]

Não jow… esses parametros são pra definir o tipo de objeto que vai ser carregado. Pra definir posicão e tamanho são estes:

vc.setDisplayLocation(2, 2);  
vc.setDisplaySize(vc.getDisplayWidth()- 4, vc.getDisplayHeight() - 4);  

Leia a documentação que eu passei e do canvas tb, rs…

ricoldi, a galerinha não gosta de ler nestes tempos de internet…quer tudo pronto…rs

Boooone, meu rapaz… quanto tempo…

Pois é concordo com você e nem tenho frequentado aqui porque só anda tendo perguntinha de framework (EU não sou muito fã) e/ou cada perguntinha que nem compensa logar.

Abraços.

Ricoldi e Boone,

Sorry, só perguntei porque realmente não estou acostumado a lidar com Canvas e a MMAPI e ao ler a documentação não estava entendendo bem.
Segui todos os passos da documentação sem sucesso.

Agora ja achei onde estava errando…na realidade boiei mesmo… Viajei legal.

Obrigado pela atenção.
Valew
:smiley:

Não jow…

Não estou falando do seu caso, até porque fiz questão de entrar e responder… e olha que faz tempo que não respondo nada aqui.
Estou falando no geral.

Que bom que conseguiu. qualquer duvida posta ai.

Abraços e boa sorte.