在 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 中加载图像的主要内容,如果未能解决你的问题,请参考以下文章