|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。
在开辟J2ME手机程序的时分,特别是在开辟游戏的时分,通明图片几近是一种一定的需求,可是在游戏开辟中我们会接纳Sprite精灵来做图形元素的绘制,而这些图片素材大概都是来自于资本中的文件,这些文件假如接纳PNG等撑持通明设置的格局的话,通明的处置就会被精灵类主动完成,不必要我们出格处置了。假如碰到一些特别需求,好比某些图片大概必要经由过程程序来绘制,大概开辟者但愿用程序来绘制,那末这时候候本人绘制的图片怎样被通明地绘制在Canvas中呢?
通明图片的绘制在J2ME中不是经由过程Graphics的办法挪用完成的,而是经由过程将Image图片对象指定成通明图片对象来完成的。在Image中有一个办法叫createRGBImage(int[]rgb,intwidth,intheight,booleanprocessAlpha)。这个办法能够创立出一幅具有通明和半通明效果的图片,当如许的图片被绘制在屏幕上的时分,会主动体现为通明或半通明色。可是这个办法发生的图片有一个成绩,就是这个图片中的像素色彩是不成变的,也就是说这个对象的getGraphics()不克不及获得Graphics对象,也就不克不及经由过程程序自界说绘制图片。而我们所必要的就是要经由过程程序来绘制图片而且到达半通明效果。那末怎样办呢?
我们如许来处置,起首我们经由过程Image的createImage办法来创立一个可变图片,然后绘制自界说的图片数据内容。示例程序以下: intw=32;
inth=24;
//创立可变的自界说图片,指定宽度和高度
ImagebufImg=Image.createImage(w,h);
Graphicsg=bufImage.getGraphics();
g.setColor(0xFFFFFF);
//利用红色绘制背景
g.fillRect(0,0,w,h);
//绘制必要的图片内容
g.setColor(0xFF0000);
g.fillRect(10,10,20,20);
//绘制图片完成,如今必要获得图片中的数据内容。
//筹办一个数组用来寄存像素色彩
int[]imgData=newint[w*h];
//获得像素色彩
bufImg.getRGB(imgData,0,w*h,0,0,w,h);
下面程序完成了对自界说图片的像素色彩的提取,在J2ME中的Image是如许划定的,假如这是一个不成变图片,获得的每个像素色彩是一个int范例的值,假如其高位是00,也就是色彩为0x00RRGGBB的时分,这个像素就是完整通明的,假如是0xAARRGGBB,个中AA暗示通明度,如许的色彩暗示半通明,如今我们获得了自界说的可变图片的像素色彩值,接上去,我们必要创立不成变图片,而且要把红色的背景设置为完整通明的。 //将获得的保留在数组中的背景色彩的高位值设置为00
for(inti=0;i<imgData.length;i++){
if(imgData[i]&0x00FFFFFF==0x00FFFFFF){
imgData[i]=imgData[i]&0x00FFFFFF;
}
}
//创立不成变通明图片,个中最初一个参数暗示通明。
ImageimmutableImg=Image.createRGBImage(imgData,w,h,true);
好了,到这里一个通明图片创立出来了,这个图片被绘制到Canvas大将会是一幅背景完整通明的图片。实在如许我们能够对这个功效封装一个办法,代码以下:createAlphaImage(Imageimg,intalphaColor){
intw=img.getWidth();
inth=img.getHeight();
int[]imgData=newint[w*h];
img.getRGB(imgData,0,w*h,0,0,w,h);
for(inti=0;i<imgData.length;i++){
if(imgData[i]&alphaColor==alphaColor){
imgData[i]=imgData[i]&alphaColor;
}
}
办法参数申明以下:
img-是不通明的原始图片片
alphaColor-是必要设为通明的像素色彩,格局为0x00RRGGBB.
主要缺点就是:速度比较慢,没有C和C++快 |
|