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

作者 Re:Picture this (中文版) [Re:bluntsword]
bluntsword



CJSDN高级会员


发贴: 322
积分: 52
于 2003-05-27 14:08 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
花不少力气翻译的,怎么说也给一分吧?


作者 Re:Picture this (中文版) [Re:bluntsword]
牛老板



发贴: 0
积分: 0
于 2003-06-05 08:18 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
呵呵..



作者 Re:Picture this (中文版) [Re:bluntsword]
Halley



发贴: 0
积分: 0
于 2003-06-09 16:24 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




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-2018 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号
客服电话 0592-8750026    客服信箱 714923@qq.com    客服QQ 714923