0

我在 J2ME 上试过这个

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

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

我该如何解决这个问题?

4

4 回答 4

1

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

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

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

于 2008-11-07T10:11:37.490 回答
1

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

于 2008-11-07T11:11:47.447 回答
1

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

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

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

于 2008-12-13T11:40:09.937 回答
0

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

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

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

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

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

于 2010-03-17T10:57:57.443 回答