Java me 在J2ME中合成2个图像
我打算在J2ME表单中安装一个水平和垂直居中的图像。但是,我找不到有用的标记元素。因此,我打算创建一个完全透明的图像,大小与表单元素相同,并将我想要的图像叠加在它的中心。并将生成的图像放置在表单中(不使用画布)。我正在寻找这样做的方法,因为我对J2ME的知识有限 需要帮忙吗Java me 在J2ME中合成2个图像,java-me,Java Me,我打算在J2ME表单中安装一个水平和垂直居中的图像。但是,我找不到有用的标记元素。因此,我打算创建一个完全透明的图像,大小与表单元素相同,并将我想要的图像叠加在它的中心。并将生成的图像放置在表单中(不使用画布)。我正在寻找这样做的方法,因为我对J2ME的知识有限 需要帮忙吗 public static Image CreateCompositeImage(Image oImage,int formWidth,int formHeight){ final int imageWidth=o
public static Image CreateCompositeImage(Image oImage,int formWidth,int formHeight){
final int imageWidth=oImage.getWidth();
final int imageHeight=oImage.getHeight();
int[] imge=new int[imageWidth*imageHeight];
oImage.getRGB(imge,0,imageWidth,0,0,imageWidth,imageHeight);
final int topMargin=(formHeight-imageHeight)/2;
final int leftMargin=(formWidth-imageWidth)/2;
final int pixelTop=topMargin*formWidth;
int[] c=new int[formWidth*formHeight];
int p=0, r=0;
for (int i=0;i<pixelTop;i++){
c[p++]=0xff000000;
}
for (int j=0;j<imageHeight;j++){
for (int i=0;i<leftMargin;i++){
c[p++]=0x880000ff;
}
for (int i=0;i<imageWidth;i++){
c[p++]=imge[r++];
}
for (int i=0;i<leftMargin;i++){
c[p++]=0x8800ff00;
}
}
int pixelBottom=formWidth*formHeight-p;
for (int i=0;i<pixelBottom;i++){
c[p++]=0xffffffff;
}
return Image.createRGBImage(c,formWidth,formHeight,true);
}
public static Image CreateCompositeImage(图像oImage、int-formWidth、int-formHeight){
final int-imageWidth=oImage.getWidth();
final int-imageHeight=oImage.getHeight();
int[]imge=新int[imageWidth*imageHeight];
getRGB(imge,0,imageWidth,0,0,imageWidth,imageHeight);
最终int topMargin=(formHeight imageHeight)/2;
最终int-leftMargin=(formWidth-imageWidth)/2;
最终int pixelTop=topMargin*formWidth;
int[]c=新的int[formWidth*formHeight];
int p=0,r=0;
对于(inti=0;i而言,更好的方法是创建从CustomItem继承的新类,或者使用画布而不是表单
在这两种情况下,都可以重写paint()方法。
这里有一个图形对象。你用这个对象来画画。
特别是对您来说,它有一个drawImage()方法,您可以将它放在适当的位置。
然后,您就不需要像素数据处理了
重写CustomItem或Canvas是Java me编程中经常做的事情,因此值得学习。有趣的想法。如果是我,我可能会制作一个类PaddedImage
扩展Image
,然后生成这样的填充图像。构造函数应该接收可显示的的宽度和文件路径。然后创建两个图像,一个来自文件路径,另一个使用可显示的宽度和文件图像高度。然后检索较大图像的图形对象,并在其上绘制另一个图像。您好,感谢您的回答。我已经将一些代码放在一起,用于将图像读入Integer数组;还为合成图像创建了另一个数组,并尝试在输入图像周围添加填充。结果是我得到了顶部和底部填充;左侧和右侧填充不可见,中心图像倾斜。尝试修复skweness。很明显,它在模拟器上看起来是正确的,但在实际设备上是倾斜的。下面是t他说:“很抱歉,一些颜色在测试中从透明变为彩色。如果我没有在整个应用程序中使用表单,那么使用画布是有意义的。我想制作的合成图像应该具有透明背景。我不确定,但我可以使用画布获得透明背景吗?大家好。任务完成了。”ed.感谢楼继伟先生和梅尔先生的加入。任务完成了,但我想问一下你们是否还在。在我从int数组创建一个图像后,图像的int数组会发生什么变化(c[p++])。它是否会自动被擦除,或者我是否手动将其设置为null或其他。通常,您会询问关于堆栈溢出的第二个问题。您的int数组位于局部变量中,因此它将在Java中进行垃圾收集,您无需执行任何操作。