网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  j2me中使用缓存将屏幕内容存储为image     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:93次  录入:管理员--2007-11-16  
 

本文介绍如何将手机屏幕的内容存储为image对象,这里认为手机屏幕上显示的是一个canvas。完成这一个功能的思想就是使用缓冲机制。我们不能直接获得canvas上的像素,因此不能直接从canvas上的内容获得image对象。转换一下思路,如果把要绘制的canvas上的内容首先绘制到一个image上,而这个image并不显示到屏幕上,只是在绘画完成后一次性的显示到屏幕上。有经验的朋友一定联想到了双缓冲机制,不过这里并不是要使用双缓冲解决闪屏的问题,而是要得到当前canvas的内容。

下面我们编写一个简单的canvas类来测试一下这个想法,simplecanvas是canvas的子类,为了保存canvas的内容,我们创建一个image,大小与canvas的尺寸相当。

以下是引用片段:

class simplecanvas extends canvas{ 
 int w; 
 int h; 
 private image offimage = null; 
 private boolean buffered = true; 
 public simplecanvas(boolean _buffered){ 
  buffered = _buffered; 
  w = getwidth(); 
  h = getheight(); 
  if(buffered) 
  offimage = image.createimage(w,h); 
 } 
 protected void paint(graphics g) { 
  int color = g.getcolor(); 
  g.setcolor(0xffffff); 
  g.fillrect(0,0,w,h); 
  g.setcolor(color); 
  graphics save = g; 
  if(offimage != null) 
   g = offimage.getgraphics(); 
   //draw the offimage 
   g.setcolor(128,128,0); 
   g.fillroundrect((w-100)/2,(h-60)/2,100,60,5,3); 
   //draw the offimage to the canvas 
   save.drawimage(offimage,0,0,graphics.top|graphics.left); 
 } 
 public image printme(){ 
  return offimage; 
 }

可以看到paint()方法,并不是直接对canvas操作,而是先把要画的内容绘制到一个image上,然后再绘制到canvas上。这样到你想抓取屏幕内容的时候就可以调用printme()方法了,返回offimage。编写一个midlet测试一下这个效果。

以下是引用片段:

package com.j2medev; 
import javax.microedition.midlet.*; 
import javax.microedition.lcdui.*; 
/** 
* 
* @author mingjava 
* @version 
*/ 
public class printscreen extends midlet implements commandlistener{ 
 private display display = null; 
 private simplecanvas canvas = new simplecanvas(true); 
 private command printcommand = new command("print",command.ok,1); 
 public void startapp() { 
  if(display == null) 
   display = display.getdisplay(this); 
  canvas.addcommand(printcommand); 
  canvas.setcommandlistener(this); 
  display.setcurrent(canvas); 
 } 
 public void pauseapp() {} 
 public void destroyapp(boolean unconditional) {} 
 public void commandaction(command command, displayable displayable) { 
  if(command == printcommand){ 
   form form = new form("screen"); 
   form.append(canvas.printme()); 
   display.setcurrent(form); 
  } 
 } 
}

运行printscreen,选择print,即可把当前的屏幕显示到一个form中。

 
 
上一篇: 用事实说话!ajax应用程序开发的七宗罪    下一篇: 利用dwr开发基于ajax的文件上载portlet
  相关文档
java 开源数据库项目 derby的问答 11-17
j2se综合--浅谈 string 类的相关应用 01-28
java文件加密器(收藏) 11-17
爪哇语言结构性模式之变压器模式介绍 11-16
深入探讨ejb中新的消息驱动组件(二) 11-17
关于eclipse 3.0中的插件自动构建简介 11-16
[struts]配置第一个struts 应用 11-17
j2me学习笔记(2)—平台体系结构详解 11-17
功能完善的java连接池调用实例 11-17
一个简单的jdbc包装器(2) 11-17
java繁体中文处理完全攻略(一) 11-16
java咖啡馆(1)——叹咖啡 11-16
xruby 0.3.1和rhg中文版本同一时间发布 11-16
使用java实现数据报通讯过程 11-16
编程需要注意的陷阱:java继承是有害的 11-16
全国计算机等级考试二级java样题 11-17
java 语法介绍(五):条件控制 11-17
hibernate 3.2.0.cr1 发布 11-17
全国计算机等级考试二级公共基础知识 11-17
使用treeview实现无限级扩展节点 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息