我正在尝试在J2ME应用程序中显示一个大图像文件。但我发现当图像文件太大时,我甚至无法创建Image实例并获得OutOfMemory
异常。
我想我可以用小块读取图像文件并创建一个缩略图给用户显示?
有没有办法做到这一点?或者是否有其他方法在应用程序中显示图像文件?
感谢。
答案 0 :(得分:1)
有很多事情需要尝试,具体取决于您想要做什么以及您希望应用程序运行的手机。
如果您的图像打包在MIDlet JAR文件中,则您对MIDP运行时所执行的操作的控制较少,因为在将数据作为图像加载之前需要对数据进行解压缩。在这种情况下,我建议只包装一个较小的图像。减少像素数或用于编码每个像素的字节数。
如果你可以从基于GCF的InputStream(文件,网络...)中读取图像字节,你需要了解图像格式(BMP很简单,JPEG不那么......)所以你可以缩小它进入一个可变的Image
对象,它会占用更少的内存,一次只有一个块。
在这种情况下,您还需要确定缩放算法应该是什么。如果手机上的LCDUI实现写得不好,将文件中的32位像素转换为内存中的8位像素可能实际上不会按预期工作。
根据图像的内容,只需移除一半像素列和一半像素线,可能正是您需要的,也可能是过于天真的方法。您可能希望查看现有的图像缩放算法并将其写入应用程序。
请记住,基本的LCDUI可能不是在屏幕上显示图像的唯一方法。 JSR-184,JSR-239,JSR-226和eSWT都可以让您以与手机LCDUI实现完全无关的方式实现这一目标。
最后,让我们面对现实,如果您的手机MIDP运行时不允许您同时在全彩色深度创建至少2个与屏幕大小相同的图像,那么可能是时候决定不支持特定的手机。