J2ME中的Image.createImage问题

时间:2008-11-07 10:02:11

标签: java java-me image.createimage

我在J2ME上试过这个

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

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

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

如果第一个参数格式不正确或无法解码,Image.createImage()会抛出IllegalArgumentException。 (我假设temp是一个byte [])。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

让我们看看文档:抛出IllegalArgumentException

  

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

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

答案 3 :(得分:0)

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

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

<强> P.S。 我假设您正在阅读JPEG图像,如果没有,请在temp数组中查找相应的标题。

此外,如果这样做无效,并且您正在阅读JPEG图像,请确保数组以FFD8开头,并以FFD9(EOI标记)结束。如果它没有以EOI结束,那就像我为SOI解释的那样...... ...

<强> P.P.S 如果您发现temp中的数据有效,那么您的平台无法解码JPEG图像,或者temp中的图像对于JPEG解码器来说很大。