我在 J2ME 上试过这个
try {
Image immutableThumb = Image.createImage( temp, 0, temp.length);
} catch (Exception ex) {
System.out.println(ex);
}
我遇到了这个错误:
java.lang.IllegalArgumentException:
我该如何解决这个问题?
我在 J2ME 上试过这个
try {
Image immutableThumb = Image.createImage( temp, 0, temp.length);
} catch (Exception ex) {
System.out.println(ex);
}
我遇到了这个错误:
java.lang.IllegalArgumentException:
我该如何解决这个问题?
如果第一个参数的格式不正确或无法解码,Image.createImage() 将引发 IllegalArgumentException。(我假设 temp 是一个字节 [])。
(此 URL 由于某种原因拒绝成为超链接(?))
很难说没有更多细节或更多周边代码,但我最初的怀疑是您尝试加载的文件是设备不支持的格式。
让我们看一下文档:抛出 IllegalArgumentException
如果 imageData 格式不正确或无法解码
因此,可能的原因可能是图像格式不受支持,也可能是数据被截断。请记住,您应该将整个文件传递给该方法,包括所有标题。如果您对格式有疑问,最好选择PNG,无论如何它必须支持。
我的 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 解码器来说太大。