【发布时间】:2010-09-20 21:09:54
【问题描述】:
在 J2ME 应用程序中加载图像的标准方法是使用 Image.createImage 方法,推荐的图像格式是 PNG。
现在,J2ME 规范没有对该方法的实现或图像在内存中的表示作出任何限制,因此,每个供应商都有不同的实现。
尤其是摩托罗拉有这个非常糟糕的实现,其中 PNG 在图像创建时被完全解码为 ARGB 字节数组。这意味着尺寸为 176x208 的 8K png 占用大约 170K 的峰值内存来加载,而 Image 对象本身使用的内存大约为 145K!在诺基亚、索尼爱立信等其他手机上,相同的图像只需要大约 16K 即可加载和存储在内存中。我不知道他们使用了哪些智能优化,但出于某种难以理解的原因,摩托罗拉的 JVM 没有。
这对我的 J2ME 应用程序造成了严重破坏,几乎不可能在摩托罗拉手机上运行一个像样的版本。我尝试了各种解决方法,例如使用图像的 gzip'd ARGB 字节数组并在绘制过程中对其进行放气,但这会导致绘制速度减慢 10 倍!
有人知道这个问题的解决方法吗? J2ME 的开源 PNG 图像解码器具有摩托罗拉所缺乏的智能?或者是否可以对 PNG 图像进行一些操作以减少其内存占用? (我目前使用索引模式 PNG)欢迎任何指针..
高丽
【问题讨论】:
-
您使用的是哪款手机?我不熟悉任何实际以每像素 4 个字节存储图像的摩托罗拉手机。通常是每个像素 2 个字节。