【问题标题】:Image.createImage problem in J2MEJ2ME 中的 Image.createImage 问题
【发布时间】:2008-11-07 10:02:10
【问题描述】:

我在 J2ME 上试过这个

try {
    Image immutableThumb = Image.createImage( temp, 0, temp.length);
} catch (Exception ex) {
    System.out.println(ex);
}

我遇到了这个错误: java.lang.IllegalArgumentException:

我该如何解决这个问题?

【问题讨论】:

  • 如果您包含一些更具体的信息,例如堆栈跟踪或异常消息,也许可以提供答案。
  • 我认为唯一能帮助您的方法是向我们展示您是如何获得临时数组的。

标签: java java-me image.createimage


【解决方案1】:

如果第一个参数的格式不正确或无法解码,Image.createImage() 将引发 IllegalArgumentException。 (我假设 temp 是一个字节 [])。

http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/Image.html#createImage(byte[],%20int,%20int)

(此 URL 由于某种原因拒绝成为超链接(?))

【讨论】:

    【解决方案2】:

    如果没有更多细节或更多周边代码,很难说,但我最初的怀疑是您尝试加载的文件是设备不支持的格式。

    【讨论】:

      【解决方案3】:

      让我们看一下文档:抛出 IllegalArgumentException

      如果 imageData 格式不正确或无法解码

      因此,可能的原因可能是图像格式不受支持,也可能是数据被截断。请记住,您应该将整个文件传递给该方法,包括所有标题。如果对格式有疑问,最好选择PNG,反正一定是支持的。

      【讨论】:

        【解决方案4】:

        我的 MIDLET 也遇到了同样的问题,而我的问题是我从套接字的 InputStream 读取的 JPEG 图像附带的 HTTP 标头。我通过在我的字节数组中找到由两个字节标识的 JPEG SOI 标记来解决它:FFD8。然后,当我在我的字节数组中找到FFD8 的位置时,我会修剪代表HTTP 标头的起始字节,然后我可以调用createImage() 而不会引发任何异常......

        您应该检查您是否属于这种情况。只需检查这是真的(temp[0] == 0xFF && temp[1] == 0xD8),如果不是,请修剪temp 的开头,以便删除HTTP 标头或其他一些垃圾...

        附言 我假设您正在阅读 JPEG 图像,如果没有,请在 temp 数组中查找适当的标题。

        另外,如果这没有帮助,并且您正在阅读 JPEG 图像,请确保数组以 FFD8 开头并以 FFD9 结尾(这是 EOI 标记)。如果它没有以 EOI 结尾,只需像我为 SOI 解释的那样修剪结尾......

        附言 如果您发现temp 中的数据是有效的,那么您的平台无法解码JPEG 图像或temp 中的图像对于JPEG 解码器来说太大了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-15
          • 2010-09-29
          • 1970-01-01
          • 1970-01-01
          • 2011-10-18
          相关资源
          最近更新 更多