在j2me中加载图像

时间:2012-02-14 12:26:13

标签: image java-me

我遇到了在j2me中加载图片的问题 我可以在哪里上传j2me模拟器的某些类型的图像,但对于一些它不加载
所以有什么问题?意味着可以在扩展Canvas类的类中加载哪种类型的图像?是否应该上传特定的图像尺寸或类型?

2 个答案:

答案 0 :(得分:1)

我不确定您到底在寻找什么,但您所描述的行为听起来很像您遇到OutOfMemory异常。尝试减少图像的尺寸(堆使用基于维度)并查看行为是否停止。这将告诉您它是否真的是OutOfMemory问题或其他问题。

其他提示:

1)将图像从最大到最小加载。这有助于堆碎片并为最大的图像提供最大的堆空间。 2)卸载(设置为null),与您加载和垃圾收集的方式相反。调用GC后,请确保Thread.yield()。 3)确保只加载所需的图像。从应用程序不再存在的状态卸载图像。 4)由于您正在创建精灵,因此一个图像可能有多个精灵。考虑创建一个图像池,以确保只加载一次图像。然后只需将每个Sprite对象指向它所需的池中的图像。您的问题中的示例似乎很可能不止一次将相同的图像加载到内存中。这很浪费,可能是OutOfMemory问题的一部分。

答案 1 :(得分:1)

我猜这个问题是以下原因之一:

1.资源名称:

资源名称区分大小写;例如, /ellen-png.png /ellen-png.PNG 或任何其他变体不同。

2.Format:

唯一必须支持的格式是png。有些手机可能支持其他格式,例如:

  • 图形交换格式(GIF)
  • 联合图像专家组(JPEG,JPG)
  • Windows或OS / 2位图(BMP)
  • 标记图像文件格式(TIF)
  • PC画笔位图(PCX)
  • 原始签名PCM数据(RAW)

但这取决于设备,如果你想成为跨平台,那么只需使用png:
1999年,当Sun Microsystems开发了J2ME平台规范及其支持API时,PNG被选为默认图像格式,因为它具有图形功能,文件小,并且不受专利问题的影响。 要确定J2ME是否处理特定媒体格式,请调用getSupportedContentTypes方法。此方法返回支持的媒体类型的字符串数组,并包括音频和视频格式以及图像格式。字符串以MIME类型格式显示此信息。例如,要检查GIF支持,请扫描此数组,查找GIF MIME类型字符串。如果匹配,则手机的J2ME实现支持GIF文件的原生显示。此代码段代码可用于此目的:

private String   mediaTypes[];   
private final    String GIF_MIME_TYPE = "image/gif";   
private boolean  gifSupported;    

// Get the media types to check for support of GIF file display   
mediaTypes = Manager.getSupportedContentTypes(null);   
int count = mediaTypes.length;   

// Check list for GIF MIME type; set support flag if present   
gifSupported = false;   
for (int i = 0; i < count; i++) {   
    if (mediaTypes[i] == GIF_MIME_TYPE)   
        gifSupported = true;   
} // end for   

如果您要使用特殊格式,可以使用特殊解码器从不支持的格式解码图像 如果资源不存在(特别是不正确的资源名称),无法加载数据,或者图像数据无法解码,createImage将抛出 java.io.IOException 。如果您捕获此异常,请检查每个案例。

3.Size:
请注意,特定设备可以加载的JAR文件的大小取决于多种因素,包括手机制造商和运营商施加的限制,甚至特定设备上的可用内存配置。图像文件大小必须在9.1千字节范围内,GIF到69.5 TIF的Kbytes。当然,因为你可能想让它们尽可能小,你可能想尝试像pngcrush这样的工具。其主要目的是通过尝试各种压缩级别和PNG过滤方法来减小PNG IDAT数据流的大小。

参考文献:

SDN FAQ - What image types does MIDP support?
gamedev.net - Image Formats in J2ME
drdobbs.com - Displaying GIF Images on J2ME Mobile Phones