在 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 个边缘并排合成到另一张图像中