J2ME學習筆記(九)

來源:互聯網
上載者:User
筆記 九

MIDP低級圖形處理


MIDP所提供的圖形處理方法都在javax.microedition.lcdui裡面。主要是如下幾個類:Display,Graphic

s,Canvas,Font,Image。
1、Display:
在每個MIDlet之中是由一個Display,屬於用Singleton

Pattern所封裝起來的類別,需要使用getDisplay來取得。當使用setCurrent()方法,並同時將一個Dis

playable的子類作為參數就可以在螢幕上顯示相關的畫面。也可一用getCurrent()擷取當前正在作用的

Displayable的對象。同時為了取得螢幕相關的屬性可以使用isColor()返回螢幕是否為彩色,numColors(

)返回螢幕所支援的彩色數,如果傳回值為2則為黑白兩色。每當Display的setCurrent方法得到Canvas子

類作為參數的時候,MIDP系統會執行paint方法並將Graphics對象當作參數。裡面有一點需要注意,由於

手持功能的螢幕大小並不是固定的,所以我們在填充背景色,前景色彩的時候有必要通過getWidth(),getHe

ight()兩個方法取得螢幕的長、寬。
2、Image:
處理圖形的時候會使用到Image類,根據Image類的產生方式可以分為可修改和不可修改的兩個方面。

可以通過isMutable方法得到此Image類是否可以修改。還可以通過getWidth(),getHeight()方法取得Imag

e對象的長,寬。
可以通過讀取影像檔,網路下載,resource bundle等方式建立一個不可修改的image對象。一旦創

建不可修改image對象,那麼這個映像的內容將不可再次更改。

package com.graph;

/**
* @author You Li
*
* CopyRight (C) 2005 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ImageEx extends MIDlet implements CommandListener {

private Command cmdExit;
private ImageCanvas canvas;

public ImageEx() {
cmdExit = new Command("Exit", Command.SCREEN, 2);
canvas = new ImageCanvas();
// TODO 自動產生建構函式存根
}

protected void startApp() throws MIDletStateChangeException {
// TODO 自動產生方法存根
canvas.addCommand(cmdExit);
canvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(canvas);
}

protected void pauseApp() {
// TODO 自動產生方法存根

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自動產生方法存根

}

public void commandAction(Command command, Displayable screen){
if (command == cmdExit){
notifyDestroyed();
}
}

}

package com.graph;

/**
* @author You Li
*
* CopyRight (C) 2005 */
import javax.microedition.lcdui.*;

public class ImageCanvas extends Canvas {

public void paint(Graphics g){
try{
Image image = Image.createImage("/JavaPowered-2.png");
g.drawImage(image, 0, 0, Graphics.TOP|Graphics.LEFT);
}catch(Exception e){
e.printStackTrace();
}
}

}

建立如上兩個類,然後運行程式就可以看到圖片顯示在模擬器的螢幕上了。例子中我們用createImage

讀取一個存在的圖片來建立一個不可更改的Image對象。還有另外兩個建構函式也是用來建立相同的image

對象,一個是createImage(byte[] imagedata,int imageoffset,int

imageLength),還有一個就是createImage(Image source)。
當然,如果我們要構建一個可以修改的image對象那麼可以使用建構函式createImage(int width,int

height)。因為一個可修改的image對象實際就是能否在背景畫圖的off scree,所以在建立一個可以修改

的image對象之前應該使用Canvas的isDoubleBuffered()方法確定裝置是否支援此方法。

font 字型

Font.getDefaultFont()--得到系統預設的字型。
Font.getFont()--得到當前所使用的字型。(getFace()『isBold();isItalic();isPlain();
isUnderlined()』,getStyle(),getSize())
Font.setFont()--設定字型
關於font一共有三個參數:
face:Graphics.FACE_MONOSPACE;Graphics.FACE_PROPORTIONAL;Graphics.FACE_SYSTEM
style:Graphics.STYLE_BOLD;Graphics.STYLE_ITALIC;Graphics.STYLE_PLAIN;
Graphics.STYLE_UNDERLINED
size:Graphics.SIZE_LARGE;Graphics.SIZE_MEDIUM;Graphics.SIZE_SMALL

關於font的幾個重要的方法:
getBaseLinePosition();getHeight();charWidth();charsWidth();stringWidth();
substringWidth()

錨點:

錨點定義了7個螢幕點:Graphics.TOP;Graphics.BOTTOM;Graphics.LEFT;Graphics.RIGHT;
Graphics.HCENTER;Graphics.VCENTER;Graphics.BASELINE。

3、Graphics

取得Graphics對象有兩個方法,用paint()方法傳入參數,還可以用Image類的getGraphics方法來得到Graphics對象。兩者區別在於paint方法得到的Graphics對象我們可以利用相關方法在螢幕上繪圖,而利用getGraphics方法得到的Graphics對象對任何呼叫不起作用。
畫圖的時候我們在圖形相關方法中使用的座標不是代表象素本身,而是指象素與象素之間空格所構成的座標!這個和我們傳統的笛卡兒座標的概念有些去表,而且是以螢幕左上方為0,0座標。
Graphics對象的setColor(int red,int green,int blue)方法用來設定象素的顏色。getGrayScale()取得目前所用的灰階,setGrayScale()則是用來設定灰階。MIDP中沒有提供設定前景色彩背景色的方法,所以必須通過填充來處理。
文字以及圖形
文字使用drawChar(),drawChars(),drawString()
圖形使用drawImage()
畫圖以及畫面填充
線:drawLine(),有4個參數,分別輸入x,y起點左邊,x,y終點座標
弧形:drawArc(),6個參數,前4個表示弧形所在的矩形範圍的座標,第五個決定起始角度,第 六個決定弧形所涵蓋第角度。
矩形:drawRect(),4個參數,x、y起點座標,寬,長
園角矩形:drawRoundRect() 6個參數,前4個表示弧形所在的矩形範圍的座標,第五個是園角所 在矩形第寬度,第六個表示矩形的高度。
填充弧形:fillArc(),6個參數,前四個決定弧形所在矩形的範圍,第五個決定起始角度,第六個決定弧形所涵蓋的角度
填充矩形:fillRect(),4個參數,x、y起點座標,寬,長
填充園角矩形:fillRoundRect(),6個參數,前4個表示弧形所在的矩形範圍的座標,第五個是 園角所在矩形第寬度,第六個表示矩形的高度。





相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。