Java me 在J2ME中合成2个图像

Java me 在J2ME中合成2个图像,java-me,Java Me,我打算在J2ME表单中安装一个水平和垂直居中的图像。但是,我找不到有用的标记元素。因此,我打算创建一个完全透明的图像,大小与表单元素相同,并将我想要的图像叠加在它的中心。并将生成的图像放置在表单中(不使用画布)。我正在寻找这样做的方法,因为我对J2ME的知识有限 需要帮忙吗 public static Image CreateCompositeImage(Image oImage,int formWidth,int formHeight){ final int imageWidth=o

我打算在J2ME表单中安装一个水平和垂直居中的图像。但是,我找不到有用的标记元素。因此,我打算创建一个完全透明的图像,大小与表单元素相同,并将我想要的图像叠加在它的中心。并将生成的图像放置在表单中(不使用画布)。我正在寻找这样做的方法,因为我对J2ME的知识有限

需要帮忙吗

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中进行垃圾收集,您无需执行任何操作。