在 j2me 中加载图像

Posted

技术标签:

【中文标题】在 j2me 中加载图像【英文标题】:Loading images in j2me 【发布时间】:2012-02-14 12:26:13 【问题描述】:

我时遇到问题 我可以在哪里为 j2me 模拟器上传某种类型的图像,但对于某些它不加载 所以有什么问题?表示可以在扩展 Canvas 类的类中加载什么类型的图像?应该有特定的图片大小或类型要上传吗?

【问题讨论】:

【参考方案1】:

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

其他提示:

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

【讨论】:

【参考方案2】:

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

1.资源名称:

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

2.格式:

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

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

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

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.尺寸: 请注意,特定设备可以加载的 JAR 文件的大小取决于多种因素,包括手机制造商和运营商施加的限制,甚至是特定设备上的可用内存配置。图像文件大小必须在 9.1 KB 的范围内(GIF 到 69.5) TIF 的千字节。当然,由于您可能希望使它们尽可能小,因此您可能需要尝试使用像 pngcrush 这样的工具。其主要目的是通过尝试各种压缩级别和 PNG 过滤方法来减小 PNG IDAT 数据流的大小。

参考文献:

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

【讨论】:

以上是关于在 j2me 中加载图像的主要内容,如果未能解决你的问题,请参考以下文章

在 j2me 中加载屏幕

图像在 iframe 中加载后未从缓存中加载

在缓存中加载 Div 背景图像 [重复]

如何在haskell(光泽)中加载图像数组?

在 Picasso 图像加载器中加载位图图像会减慢列表视图中的滚动速度

如何等待在画布中加载图像