分享
 
 
 

J2ME学习笔记(九)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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个表示弧形所在的矩形范围的坐标,第五个是 园角所在矩形第宽度,第六个表示矩形的高度。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有