Codename One - 从大图创建小图像(并存储它)

3
我有一个GUI应用程序,用于管理客户的个人资料。当创建新个人资料时,会拍摄一张照片,并将其路径(字符串)与其他信息一起保存在Hashtable中。
当显示所有客户的列表时,每个客户信息都设置在Multibutton中,其中包含客户的小图片。该图片是掩蔽图片,每次加载表单时都会设置,导致加载速度非常慢(没有小图片时,加载速度更快)。

enter image description here

问题

我想在拍摄并保存客户照片后保存掩码小图片。这样,当我显示客户列表时,只需获取小图像而不必为所有项目进行掩码处理。这种做法可行吗?

我正在尝试以下方法:(我的目标是拥有一个可用的“smallPhotoPath”)

String bigPhotoPath = Capture.capturePhoto(width, -1);
Image bigPhoto = Image.createImage(bigPhotoPath);
...
//masking image
...
bigPhoto = bigPhoto.applyMask(mask);

String smallPhotoPath = bigPhotoPath+"Small";
Image smallPhoto = bigPhoto.scaled(bigPhoto.getWidth()/8, -1);
java.io.OutputStream os = Storage.getInstance().createOutputStream(smallPhotoPath);
ImageIO.getImageIO().save(smallPhoto, os, ImageIO.FORMAT_PNG, 1);
os.close();

我不明白你的代码片段有什么问题?请注意,如果图像已经被预先遮罩,你需要从标签/多按钮中移除掩码。 - Shai Almog
当我尝试使用 "Image.createImage(smallPhotoPath)" 将小图片加载到 Multibutton 中时,它无法工作,并且会捕获错误。 - Felipe
Shai,这个能用EncodedImage吗?我看了你的ChatApp教程,但是你在那里用URLImage替换了EncodedImage。我能不能做同样的事情,但是用从摄像头捕获的图像而不是网络上的图像? - Felipe
EncodedImage只是加载文件中的图像,因此在功能上与Image并没有太大区别。我们在这里解释了许多不同类型图像之间的差异:https://www.codenameone.com/manual/graphics.html#deep-into-images-section - Shai Almog
1个回答

2

经过多次尝试,我解决了这个问题。我修改了以下行:

java.io.OutputStream os = Storage.getInstance().createOutputStream(smallPhotoPath);

针对这个问题:

OutputStream os = FileSystemStorage.getInstance().openOutputStream(smallPhotoPath);

现在它正常工作 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接