WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术进阶教程基于NOKIA的Camera MIDlet设计

基于NOKIA的Camera MIDlet设计
作者:crystal编  来源:yesky  发布时间:2005-8-27 14:59:50
 DisplayCanvas类的作为就是将接受自MIDlet的字节数组转变成图像并显示在屏幕上。

//unnamed package
import javax.microedition.lcdui.*;
class DisplayCanvas
extends Canvas
implements CommandListener{
private final CameraMIDletmidlet;
private Image image=null;
DisplayCanvas(CameraMIDlet midlet)
{
this.midlet=midlet;
addCommand(newCommand("Back",Command.BACK,1));
setCommandListener(this);
}
public void paint(Graphicsg)
{
g.setColor(0x0000FFFF);//cyan
g.fillRect(0,0,getWidth(),getHeight());
if(image!=null)
{
g.drawImage(image,
getWidth()/2,
getHeight()/2,
Graphics.VCENTER|Graphics.HCENTER);
}
}
void setImage(byte[]pngImage)
{
image=Image.createImage(pngImage,0,pngImage.length);
}
public void commandAction(Commandc,Displayabled)
{
midlet.displayCanvasBack();
}
}

  应用程序描述符(camera.jad)

  Camera MIDlet的应用程序描述符仅仅是简单的将MIDlet描述加入到托管域中。

MIDlet-Description:CameraMIDlet
0MIDlet-Jar-Size:4186
MIDlet-Jar-URL:camera.jar
MIDlet-Name:Camera
MIDlet-Vendor: Forum Nokia
MIDlet-Version:0.4

  Manifest

  Manifest包括了加入描述的托管域和一个icon()函数:

MIDlet-Name:Camera
MIDlet-Version:0.4
MIDlet-Vendor:Forum Nokia
MIDlet-Description:Camera
MIDletMIDlet-Icon:/camera.png
MicroEdition-Profile:MIDP-1.0
MicroEdition-Configuration:CLDC-1.0
MIDlet-1:Camera,/camera.png,CameraMIDlet

使用VideoControl表单

  CameraCanvas类常用来显示采集到的图像,他所起的作用与常见的表单大致相同,一旦执行它就将取代CameraCanvas(对CameraMIDlet作了很少的微不足道的修改),代码片断如下:

  CameraForm类

//unnamed package
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.IOException;
class CameraForm
extends Form
implements CommandListener{
private final FormCameraMIDlet midlet;
private final Command exitCommand;
private Command captureCommand=null;
private Player player;
private VideoControl videoControl;
private Boolean active=false;
private StringItem messageItem;
CameraForm(FormCameraMIDlet midlet)
{
super("Camera");
this.midlet=midlet;
messageItem=newStringItem("Message","start");
append(messageItem);
exitCommand=newCommand("Exit",Command.EXIT,1);
addCommand(exitCommand);
setCommandListener(this);
//initialize camera
try{
player=Manager.createPlayer("capture://video");
player.realize();
//Grab the video control and set it to the current display.
videoControl=(VideoControl)(player.getControl("VideoControl"));
if(videoControl!=null)
{
append((Item)(videoControl.initDisplayMode(
VideoControl.USE_GUI_PRIMITIVE,null)));
captureCommand=newCommand("Capture",Command.SCREEN,1);

addCommand(captureCommand);
messageItem.setText("OK");
}
else{
messageItem.setText("Novideocontrol");
}
}
catch(IOExceptionioe)
{
messageItem.setText("IOException:"+ioe.getMessage());
}
catch(MediaExceptionme)
{
messageItem.setText("MediaException"+me.getMessage());
}
catch(SecurityExceptionse)
{
messageItem.setText("Securityexception:"+se.getMessage());
}
}
synchronizedvoidstart()
{
if(!active)
{
try{
if(player!=null)
{
player.start();
}
if(videoControl!=null)
{
videoControl.setVisible(true);
}
}
catch(MediaExceptionme)
{
messageItem.setText("Mediaexception:"+me.getMessage());
}
catch(SecurityExceptionse)
{
messageItem.setText("Securityexception:"+se.getMessage());
}
active=true;
}
}
synchronizedvoidstop()
{
if(active)
{
try{
if(videoControl!=null)
{
videoControl.setVisible(false);
}

if(player!=null)
{
player.stop();
}
}
catch(MediaExceptionme)
{
messageItem.setText("Mediaexception:"+me.getMessage());
}
active=false;
}
}
public void commandAction(Commandc,Displayabled)
{
if(c==exitCommand)
{
midlet.cameraFormExit();
}
elseif(c==captureCommand)
{
//if we have a capture command,we know videoControlisnotnulltry{
byte[]pngImage=videoControl.getSnapshot(null);
midlet.cameraFormCaptured(pngImage);
messageItem.setText("OK");
}
catch(MediaExceptionme)
{
messageItem.setText("Mediaexception:"+me.getMessage());
}
}
}
}

  结束语

  本文提供的MIDlet仅仅是一个实例,在实践中可以扩展这个实例。首先在实践中可以将图像存储起来,然后在其他屏幕浏览这些图像,这是一个非常有意思的做法。另外还可以将图像以HTTP方式传送到WEB服务器上,然后可以将这些图像动态的加入用户的WEB日志中,MIDlet也允许用户将带文本的图像传送到WEB站点。

上一页  [1] [2] 

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码