国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

J2ME中使用緩存將屏幕內(nèi)容存儲(chǔ)為Image

2019-11-18 11:35:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友


  本文介紹如何將手機(jī)屏幕的內(nèi)容存儲(chǔ)為Image對(duì)象,這里認(rèn)為手機(jī)屏幕上顯示的是一個(gè)Canvas。完成這一個(gè)功能的思想就是使用緩沖機(jī)制。我們不能直接獲得Canvas上的像素,因此不能直接從Canvas上的內(nèi)容獲得Image對(duì)象。轉(zhuǎn)換一下思路,假如把要繪制的Canvas上的內(nèi)容首先繪制到一個(gè)Image上,而這個(gè)Image并不顯示到屏幕上,只是在繪畫完成后一次性的顯示到屏幕上。有經(jīng)驗(yàn)的朋友一定聯(lián)想到了雙緩沖機(jī)制,不過(guò)這里并不是要使用雙緩沖解決閃屏的問(wèn)題,而是要得到當(dāng)前Canvas的內(nèi)容。

  下面我們編寫一個(gè)簡(jiǎn)單的Canvas類來(lái)測(cè)試一下這個(gè)想法,SimpleCanvas是Canvas的子類,為了保存Canvas的內(nèi)容,我們創(chuàng)建一個(gè)Image,大小與Canvas的尺寸相當(dāng)。

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.TOPGraphics.LEFT);
 }

 public Image printMe(){
  return offImage;
 }

  可以看到paint()方法,并不是直接對(duì)Canvas操作,而是先把要畫的內(nèi)容繪制到一個(gè)Image上,然后再繪制到Canvas上。這樣到你想抓取屏幕內(nèi)容的時(shí)候就可以調(diào)用printMe()方法了,返回offImage。編寫一個(gè)MIDlet測(cè)試一下這個(gè)效果。

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);
  }
 }
}
  運(yùn)行PrintScreen,選擇Print,即可把當(dāng)前的屏幕顯示到一個(gè)Form中。如下圖所示:

J2ME中使用緩存將屏幕內(nèi)容存儲(chǔ)為Image



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天津市| 碌曲县| 宝山区| 收藏| 来凤县| 奎屯市| 旌德县| 冀州市| 灵川县| 岳池县| 江华| 方山县| 昆山市| 迁安市| 万荣县| 河东区| 洛隆县| 莲花县| 九江市| 玛曲县| 泽州县| 微山县| 乌恰县| 聂拉木县| 富民县| 石首市| 万盛区| 搜索| 潍坊市| 六安市| 卫辉市| 临高县| 东乡族自治县| 普兰店市| 额敏县| 蓝山县| 吴旗县| 尚志市| 射洪县| 佛山市| 麻江县|