在 J2ME 中合成 2 个图像

Posted

技术标签:

【中文标题】在 J2ME 中合成 2 个图像【英文标题】:Compositing 2 images in J2ME 【发布时间】:2014-02-13 08:40:45 【问题描述】:

我打算在 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);

【问题讨论】:

有趣的想法。如果是我,我可能会创建一个类PaddedImage 扩展Image,然后生成这样的填充图像。构造函数应该接收Displayable 的宽度和文件的路径。然后创建两张图像,一张来自文件路径,一张使用Displayable 的宽度和文件图像的高度。然后检索较大图像的Graphics 对象,并在其上绘制另一个图像。 您好,谢谢您的回答。我已经整理了一些将图像读入整数数组的代码;并且还为合成图像创建了另一个数组,并尝试在输入图像周围添加填充。结果是我得到了顶部和底部填充;左右填充不可见,并且中心图像倾斜。试图修复偏度。奇怪的是,它在模拟器上看起来很正确,但在实际设备上却有偏差。这是代码 抱歉,有些颜色为了测试而从透明变为彩色。 【参考方案1】:

更好的方法是创建继承自 CustomItem 的新类,或者使用 Canvas 代替 Form。

在这两种情况下,您都会覆盖paint() 方法。 在那里你得到一个图形对象。你用这个对象做你的画。 特别是对你来说,它有一个 drawImage() 方法,你可以在其中放置位置。 这样您就不需要像素数据操作了。

覆盖 CustomItem 或 Canvas 是您在 Java-me 编程中经常做的事情,因此值得学习。

【讨论】:

如果我没有在整个应用程序中使用表单,那么使用画布是有意义的。我想要制作的合成图像具有透明背景。我不确定,但我可以使用画布获得透明背景吗? 大家好。任务完成。感谢 mr_lou 和 Meier 先生的关心加入。 任务完成,但我想问一下你们是否还在。在我从 int 数组创建图像之后,图像的 int 数组会发生什么( c[p++] )。它是自动删除还是我手动将其设置为 null 或什么。 通常你会问第二个关于堆栈溢出的问题。您的 int 数组位于局部变量中,因此它将在 Java 中进行垃圾收集,您无需执行任何操作。

以上是关于在 J2ME 中合成 2 个图像的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick:将一张图像的 4 个边缘并排合成到另一张图像中

使用python魔杖的图像合成结果不正确

如何在一个流中合成多个图像

如何在 Rails 或 iOS 上将图像组合成 JPG 图像/精灵并写入元数据

图像质量评价:合成失真图像方法

在图像文本文档中随机生成合成噪声