j2me中,将屏幕上某一区域的颜色进行反转

如果自己使用低级UI的时候,比如说在Canvas上使用Button,则在Ok键按下之后,就要自己来处理颜色的改变,比如说将颜色反转。

Graphics类中有drawRGB方法,用该方法可以将指定的区域设为特定的颜色数据。

这个方法的声明如下:

void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);

参数的意义分别为:

rgbData: 有效的数据,即要写到某个区域的颜色数据信息

offset:有效数据在rgbData中的起始位置

scanlength: 扫描行的宽度,即要写的数据的宽度,这个值一般与后面的width相同

x: 表示区域开始的x坐标

y: 表示区域开始的y坐标

width:这个区域的宽度

height: 这个区域的高度

processAlpha:是否使用alpha (这个我设为TRUE或FALSE没看到有什么影响,不知道是怎么回事)

所以,将屏幕上原来的数据取下来之后,用0x00ffffff进行异或,就可以得到取反后的数据,然后将这个数据用drawRGB重新写到屏幕上就可以实现反转了。

 

但怎么从屏幕上取得原来的数据,这个还有点麻烦

 

使用双缓冲就是解决办法之一,其实只是将图画在一个全局Image上面,可以首先创建一个Image,然后用getGraphics方法来获取Graphics,然后在paint里面全都画到这个Graphics上,最后在paint方法要返回的时候,一次性再用Graphics的drawImage方法把那个全局Image画出来。

这样,在别处就可以使用那个全局Image所对应的Graphics了。在Image里面有个getRGB方法,它的参数类似于Graphics里面的drawRGB,用这个getRGB来取得原来的数据,将颜色数据进行反转,然后再写回去,这样就可以将某个区域的颜色进行反转了。

 

下面是简单的示例代码:

 

btw: 用j2me写普通的应用软件界面真是麻烦……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值