J2ME中使用缓存将屏幕内容存储为Image
本文介绍了如何将手机屏幕上的内容存储为图像对象。这里认为手机屏幕上显示的是画布。实现这一功能的思想是使用缓冲机制。我们无法直接获取画布上的像素,所以无法直接从画布上的内容获取图像对象。换个思路。如果你先把画布上要画的内容画到一个图像上,而这个图像并没有显示在屏幕上,只有画完了才会显示在屏幕上。有经验的朋友一定会想到双缓冲机制,但是这里我们并不是想用双缓冲来解决闪屏的问题,而是获取当前画布的内容。
让我们编写一个简单的Canvas类来测试这个想法。SimpleCanvas是画布的子类。为了保存画布的内容,我们创建了一个与画布大小相同的图像。
以下是一段引文片段:
类SimpleCanvas扩展Canvas {
int w;
int h;
私有图像offImage = null
private boolean buffered = true;
public simple canvas(boolean _ buffered){
buffered = _ buffered;
w = getWidth();
h = getHeight();
if(buffered)
of image = image . create image(w,h);
}
protected void paint(Graphics g){
int color = g . getcolor();
g . set color(0x ffffff);
g.fillRect(0,0,w,h);
g.setColor(颜色);
图形保存= g;
if(offImage!= null)
g = of image . get graphics();
//绘制offimage
g.setColor(128,128,0);
g . fillroundrect((w-100)/2,(h-60)/2,100,60,5,3);
//将offimage绘制到画布上
save.drawImage(offImage,0,0,Graphics。|图形。左);
}
public Image print me(){
return of Image;
}
你可以看到paint()方法并不是直接在Canvas上操作,而是先把要绘制的内容绘制到一个图像上,然后再绘制到Canvas上。这样,当你想抓取屏幕内容时,可以调用printMe()方法,返回offImage。编写一个MIDlet来测试这种效果。
以下是一段引文:
package com。J2MEdev
导入javax . micro edition . midlet . *;
导入javax . micro edition . lcdui . *;
/* *
*
* @ author Ming Java
* @ version
*/
公共类PrintScreen扩展MIDlet实现CommandListener{
私有显示display = null
private simple canvas canvas = new simple canvas(true);
私有命令printCommand = new Command("Print ",命令。OK,1);
public void startApp(){
if(display = = null)
display = display . get display(this);
canvas . add command(print command);
canvas . set command listener(this);
display . set current(canvas);
}
public void pause app(){ }
public void destroyApp(boolean无条件){ }
public void Command action(Command命令,可显示可显示){
if(Command = = print Command){
Form Form = new Form(" screen ");
form . append(canvas . print me());
display . set current(form);
}
}
}
运行PrintScreen并选择Print以在窗体中显示当前屏幕。
0条评论