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