Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » 技术文章库  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 Picture this (中文版)
bluntsword



CJSDN高级会员


发贴: 322
积分: 52
于 2003-05-26 13:53 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我自己翻译的,原文在http://www.javaworld.com/javaworld/jw-05-2003/jw-0516-webcam.html?,请大家多提意见!

Picture this
View Web camera snapshots using a J2ME-capable phone

By Brian Carr

概要
用支持J2ME的电话,你可以在行动中观看任何Web相机拍摄的图片。这篇文章详细地从高层次上介绍了用Web相机周期性地拍照,将其张贴至Web服务器以及再下载到支持Java的电话或PDA上的整个过程。本文不会涉及安全问题,所以如果你的图片是保密的,你需要保护你的Web服务器。当然,安全问题应该在任何应用中均被考虑。

Mobile Information Device Profile (MIDP)为所有支持的手机、寻呼机和PDA提供了编写无线应用的Java API。MIDP应用的另一个名字是MIDlet。让我们先来看看MIDlet和Java所涉及的一些基础知识。

一个MIDlet是一个从javax.microedition.midlet.MIDlet抽象类派生出来的Java类。首先,一个从MIDlet抽象类派生出的MIDlet必须实现startApp()、pauseApp()和destroyApp()三个方法。由于所有的MIDP实现必须支持存为PNG格式的图片,我在本文的例子中使用这个格式。如果你的Web相机不支持将图片导出为PNG格式,你需要用一个批处理程序进行格式转换。一个这样的程序是IrfanView。

所有的MIDP实现都必须支持HTTP协议。推荐使用HTTP是因为它使应用程序可以在所有的移动信息设备间移植。下图描述了Web相机到PDA连接的大概结构。

建立你的环境
对于客户机开发环境,你需要如下三个软件:
1. Java 2 Platform, Standard Edition (J2SE)。确认你按照安装说明上所示设置你的环境变量。
2. Java 2 Platform, Micro Edtion (J2ME) Wireless Toolkit。这个工具集为开发者提供了在支持CLDC/MIDP手机和PDA上开发Java技术应用的模拟环境和文档。
3. 带有图片捕获软件的Web相机。我用的是X10 Web相机及附带的XRay软件。安装和配置说明也附带在软件中。XRay软件可以周期性的拍摄相片,间隔时间可由用户设定。

你还需要一个代码编辑器。你可以用Notepad(如果你用Windows)或者更具想象力的软件,例如jEdit。

至于服务器软件,你有多种选择。你可以选择Java 2 Platform, Enterprise Edition或者Apache Tomcat。如果你希望不用修改就能使用本文中的例子,你应该只用Tomcat。本文中的源程序源于J2ME Wireless Toolkit中的PhotoAlbum范例。我做了一些修改使之更精确地适应我们应用的需要。

跃入代码
当你已创建的样本程序在你的电话上启动,所有可能相机的列表通过对setupImageList()方法的调用从JAD文件读入:

for (int n = 1; n < 100; n++) {
String nthImage = "PhotoImage-"+ n;
String image = getAppProperty(nthImage);
if (image == null || image.length() == 0)
break;

String nthTitle = "PhotoTitle-" + n;
String title = getAppProperty(nthTitle);
if (title == null || title.length() == 0)
title = image;
imageNames.addElement(image);
imageList.append(title, null);
}

JAD文件使设备可以检验类似jar文件是否太大和是否有一个新版本的MIDlet Suite已经在设备上安装但并未下载jar文件之类的事情。JAD文件还提供了增加更多的相机但无需更改byte code这样的能力。

setupImageList()方法在一个循环中运行以便从JAD中读取所有可能相机的信息。这个列表被存在变量imageList中。

在你从列表中选择了一个你想看的相机之后,其线程启动。run()方法现实一个进度窗口来告诉用户图片正在下载。如果一个内存不够的错误发生,应用程序会显示一个警告。如果图片未被找到,一个信息出现,然后菜单再次显示。createImage()方法会创建一个到Web服务器的HTTP连接:

c = (HttpConnection)Connector.open(name);

应用程序会检查并确定图片是PNG格式的。如果不是,一个错误信息会被显示出来:

if (!type.equals("image/png")) {
throw new IOException("Expecting a PNG image, but received " + type);
}

DataInputStream通过HTTP连接读取图片:

is = c.openDataInputStream();
byte[] data = new byte[len];
is.readFully(data);
return Image.createImage(data, 0, len);

PhotoFrame类在这里做不少事情。它生成你的框架并显示图片:

this.images = images;
if (images.size() > 0) {
Image image = (Image)images.elementAt(0);
imageWidth = image.getWidth();
imageHeight = image.getHeight();
} else {
imageWidth = 0;
imageHeight = 0;
}
index = 0;
imageX = (getWidth() - imageWidth) / 2;
imageY = (getHeight() - imageHeight) / 2;
genFrame(style, imageX, imageY, imageWidth, imageHeight);
.
.
.
g.drawImage((Image)images.elementAt(index),
imageX, imageY, Graphics.LEFT|Graphics.TOP);

更多Web相机
这个例子具有从三个不同的相机看图片的能力。如果你想增加更多相机,仅需要修改getimage.jad文件。最简单的方法是通过J2ME Wireless Toolkit:
1. 启动KToolbar
2. 点击Settings
3. 选择User Defined标签
4. 点击Add并输入PhotoImage-3作为属性名
5. 输入你图片捕获软件存储照片的位置作为属性值
6. 点击Add并输入PhotoTitle-3作为属性名
7. 输入一个不同的,描述相机所在位置或者它拍摄何种类型图片的名字你作为属性值(例如:监视你前门的相机可以叫做“前门”)
8. 点击Run

修改JAD文件使之指向你自己的照片。为此仅需要指向你Web服务器上存储捕获你照片的路径(例如:http://127.0.0.1:8080/imgBabysRoom.png)。

运行例子
现在你已经可以运行例子了。正如上面指出的,你必须先配置你客户端和服务器的环境。配置好后,下载本文的源代码并将其放入J2ME Wireless Toolkit的目录(C:\WTK104\apps\getimage)。设好CLASSPATH,确认你已经将J2SE加入你的PATH(path=%path%;C:\j2sdk1.4.0\bin)。然后按照下列步骤:
1. 启动Apache Tomcat
2. 启动KToolbar
3. 在KToolbar中,点击Open Project并选择getimage项目
4. 为使显示效果更好,更改设备为DefaultColorPhone
5. 点击Build
6. 点击Run,好好玩玩

在你的设备上运行例子
在你在J2ME Wireless Toolkit中的模拟器上测试应用并对结果满意之后,你可以将其部署到你的J2ME设备上去。由于这是个网络应用,应该在一个真实的无线网络中进行测试以确认其性能是可以接受的。对于不同的设备制造商的设计,你会需要不同的应用部署过程。可以参见资源中的MIDP部署参考。

关于作者
Brian Carr是一个高级数据库管理员、Oracle认证专家和一家在Ohio的Akron的制造公司的开发人员。


bluntsword edited on 2003-05-26 22:30


话题树型展开
人气 标题 作者 字数 发贴时间
8197 Picture this (中文版) bluntsword 4264 2003-05-26 13:53
6648 Re:Picture this (中文版) bluntsword 18 2003-05-27 14:08
6315 Re:Picture this (中文版) 牛老板 4 2003-06-05 08:18
7122 Re:Picture this (中文版) Halley 0 2003-06-09 16:24

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2020 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号
客服电话 0592-8750026    客服信箱 714923@qq.com    客服QQ 714923