在J2ME MIDP1.0规范中并未实现半透明 功能,只有少数手机厂商提供这方面的API,例如诺基亚.到了MIDP2.0,虽然已经提供了像getRGB(),drawRGB()这样的API,但仍然有很部分MIDP2.0的手机不能实现半透明(目前所知的摩托E398就无法实现半透明),鉴于这种情况,使得在游戏开发中,不可能用同一种方法实现各种不同品牌不同机型上的半透明效果),因而,必须对具体机型做针对性的处理.以下是两种创建半透明图片的方法:
1.利用诺基亚自身提供的API,适合诺基亚手机和支持诺基亚开发包的手机(如索爱K700)
/** *//**
* @param path 源图片的路径
* @param w 源图片宽
* @param h 源图片高
* @return 半透明图
*/
Image createAlphaImage(String path,int w,int h) ...{
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream(path));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try ...{
try ...{
while (true) ...{
baos.write(dis.readByte());
}
}
catch (IOException ex1) ...{
}
dis.close();
}
catch (IOException ex) ...{
}
//将源PNG图片数据转成字节数组
byte[] data=baos.toByteArray();
short[] pixels=new short[w*h];
//创建可变图片
Image img=DirectUtils.createImage(data,0,data.length);
Graphics g=img.getGraphics();
DirectGraphics dg=DirectUtils.getDirectGraphics(g);
//此处DirectGraphics.TYPE_USHORT_4444_ARGB只针对QD等1.0的手机 对于2.0手机根据具体颜色制式做调整
dg.getPixels(pixels,0,w,0,0,w,h,DirectGraphics.TYPE_USHORT_4444_ARGB);
int length=pixels.length;
for(int i=0;i<length;i++)...{
//设置alpha值 即半透明度
pixels[i]=(short)((pixels[i]&0x0fff)+0x3000);
}
dg.drawPixels(pixels,true,0,w,0,0,w,h,0,dg.TYPE_USHORT_4444_ARGB);
return img;
}
对于上面getPixels()方法,由于QD系列手机中分别采用4个bit来表示RGB三种颜色,另加4bit作为alpha通道,因此,它的颜色制式实现上只占用4*4=16bit,即一个short,所以用DirectGraphics.TYPE_USHORT_4444_ARGB制式.对于其他机型,可参考诺基亚J2ME开发文档.
以上方法适用于通过已有图片创建半透明图片.而对于想创建半透明的纯色图片,则更简单.
/** *//**
* 创建半透明图片
* @param argb 半透明度 取值在0到100之间
* @param width 图片宽度
* @param height 图片高度
* @return 创建好的半透明图片
*/
public static Image createAlpImageQD(int argb,int w,int h)...{
int length=w*h;
short[] pixels=new short[length];
try...{
//创建一张黑色的可变图片
Image img=DirectUtils.createImage(w,h,0x0000);
Graphics g=img.getGraphics();
DirectGraphics dg=DirectUtils.getDirectGraphics(g);
int alpha=(argb*0xf/100)&0xf;
argb=alpha<<12;
for(int i=0;i<length;i++)...{
pixels[i]=(short)(0x0|argb);
}
dg.drawPixels(pixels,true,0,w,0,0,w,h,0,DirectGraphics.TYPE_USHORT_4444_ARGB);
// numb2=200;
return img;
}catch(Exception e)...{}
return null;
}
2,使用MIDP2.0提供的API实现半透明
/** *//**
* 创建半透明图片(MIDP2.0)
* @param path 源PNG图片路径
* @return 创建好的半透明图片
*/
Image createAlphaImage(String path)...{
try...{
Image tmpImage = Image.createImage(path);
int[]data=new int[tmpImage.getWidth()*tmpImage.getHeight()];
tmpImage.getRGB(data,0,tmpImage.getWidth(),0,0,tmpImage.getWidth(),tmpImage.getHeight());
int len=data.length;
for(int i=0;i<len;i++)...{
//0x65000000为半透明度,可根据需要适当调整
data[i]=data[i]+0x65000000;
}
return Image.createRGBImage(data,tmpImage.getWidth(),tmpImage.getHeight(),true);
}
catch(Exception e)...{
System.out.println("create Alpha Image fail!!");
return null;
}
}
分享到:
相关推荐
j2ME实现半透明圆,和椭圆的效果,只适用于2.0版本的
在J2ME(Java 2 Micro Edition)平台上,开发移动应用程序时,有时我们需要处理图片,包括显示、缩放以及实现半透明效果。本篇将详细解释如何在J2ME中实现半透明图片以及图片的缩放功能。 首先,让我们探讨如何实现...
通过设置正确的Alpha值,我们可以创建具有半透明效果的泡泡。 碰撞算法是程序的核心部分。在这个项目中,作者可能使用了简单的矩形碰撞检测,即比较每个泡泡的边界矩形是否相交。这种方法快速且易于实现,但可能会...
当Alpha通道的值不为0时,根据具体数值表示不同程度的半透明效果。 ##### 2. 自定义绘制透明图片 如果需要自定义绘制一张透明图片,则需要先创建一个可变的`Image`对象,然后通过`Graphics`对象在其上绘制所需内容...
常见的格式有GIF、PNG和JPEG,其中PNG支持透明度,适用于需要精细图形和半透明效果的场合。开发者需要根据实际需求进行图片压缩和尺寸调整,以确保在各种设备上流畅运行。 4. **使用素材的注意事项** 在使用这些...
对于需要通过程序绘制图片并实现半透明效果的需求来说,这显然是不够的。 #### 二、实现透明图片的具体步骤 为了通过程序绘制图片并实现半透明效果,可以按照以下步骤操作: 1. **创建可变图片**:首先通过`Image...
还可以通过`setAlpha()`调整透明度,实现半透明效果。 2. **变换矩阵**:通过`translate()`, `rotate()`, `scale()`等方法,可以对图形进行平移、旋转和缩放,从而实现动态效果。 3. **绘图模式**:`setPaintMode...
4. 透明度处理:PNGMate支持PNG的alpha通道,可以处理半透明图像。这对于手机游戏中的角色动画、背景层叠等效果至关重要,可以实现更加细腻的视觉体验。 5. 压缩功能:PNG本身就是一种压缩格式,但PNGMate提供了更...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...