Codenameone 如何对dimage.create(InputStream,int)函数进行编码?

Codenameone 如何对dimage.create(InputStream,int)函数进行编码?,codenameone,Codenameone,使用“EncodedImage.create”时显示以下错误。但当img大小为中等时,它就可以工作,而在大图像url中则不起作用。为什么呢?警告告诉我们使用EncodedImage.create(InputStream,int)代替,但我不知道在int部分保留什么?你能给我一个例子或示例代码吗。谢谢 Warning: loading large images using EncodedImage.create(InputStream) might lead to memory issues, t

使用“EncodedImage.create”时显示以下错误。但当img大小为中等时,它就可以工作,而在大图像url中则不起作用。为什么呢?警告告诉我们使用EncodedImage.create(InputStream,int)代替,但我不知道在int部分保留什么?你能给我一个例子或示例代码吗。谢谢

Warning: loading large images using EncodedImage.create(InputStream) might lead to memory issues, try using EncodedImage.create(InputStream, int)
    javax.imageio.IIOException: Unsupported Image Type
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1068)
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1039)
        at javax.imageio.ImageIO.read(ImageIO.java:1448)
        at javax.imageio.ImageIO.read(ImageIO.java:1352)
        at com.codename1.impl.javase.JavaSEPort.createImage(JavaSEPort.java:3432)
        at com.codename1.ui.Image.createImage(Image.java:632)
        at com.codename1.ui.EncodedImage.getInternal(EncodedImage.java:329)
        at com.codename1.ui.EncodedImage.getInternalImpl(EncodedImage.java:304)
        at com.codename1.ui.EncodedImage.getWidth(EncodedImage.java:472)
        at com.codename1.components.ImageViewer.imageAspectCalc(ImageViewer.java:427)
        at com.codename1.components.ImageViewer.updatePositions(ImageViewer.java:448)
        at com.codename1.components.ImageViewer.setImage(ImageViewer.java:573)
        at com.codename1.components.ImageViewer$1Listener.dataChanged(ImageViewer.java:614)
        at com.codename1.ui.util.EventDispatcher.fireDataChangeEvent(EventDispatcher.java:183)
        at userclasses.StateMachine$ImageList$1.actionPerformed(StateMachine.java:373)
        at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:455)
        at com.codename1.ui.util.EventDispatcher.access$100(EventDispatcher.java:41)
        at com.codename1.ui.util.EventDispatcher$CallbackClass.run(EventDispatcher.java:91)
        at com.codename1.ui.Display.processSerialCalls(Display.java:1149)
        at com.codename1.ui.Display.edtLoopImpl(Display.java:1093)
        at com.codename1.ui.Display.mainEDTLoop(Display.java:994)
        at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
        at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
    java.lang.IllegalArgumentException: create image failed for the given image data of length: 3705434
        at com.codename1.ui.Image.createImage(Image.java:634)
        at com.codename1.ui.EncodedImage.getInternal(EncodedImage.java:329)
        at com.codename1.ui.EncodedImage.getInternalImpl(EncodedImage.java:304)
        at com.codename1.ui.EncodedImage.getWidth(EncodedImage.java:472)
        at com.codename1.components.ImageViewer.imageAspectCalc(ImageViewer.java:427)
        at com.codename1.components.ImageViewer.updatePositions(ImageViewer.java:448)
        at com.codename1.components.ImageViewer.setImage(ImageViewer.java:573)
        at com.codename1.components.ImageViewer$1Listener.dataChanged(ImageViewer.java:614)
        at com.codename1.ui.util.EventDispatcher.fireDataChangeEvent(EventDispatcher.java:183)
        at userclasses.StateMachine$ImageList$1.actionPerformed(StateMachine.java:373)
        at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:455)
        at com.codename1.ui.util.EventDispatcher.access$100(EventDispatcher.java:41)
        at com.codename1.ui.util.EventDispatcher$CallbackClass.run(EventDispatcher.java:91)
        at com.codename1.ui.Display.processSerialCalls(Display.java:1149)
        at com.codename1.ui.Display.edtLoopImpl(Display.java:1093)
        at com.codename1.ui.Display.mainEDTLoop(Display.java:994)
        at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
        at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

警告与你得到的例外情况无关。一般来说,我们建议人们避免使用和使用

对于较大的图像,后者的速度明显更快

EncodedImage
方法失败较晚,这就是为什么该堆栈令人困惑的原因。您创建了一个包含无效数据的图像(例如HTML错误结果页),因此在尝试显示图像时会出现错误


与常规图像不同,
EncodedImage
只加载文件的数据,不检查其有效性。它在RAM使用方面非常有效,因为GC可以将未压缩的图像逻辑从RAM中丢弃,用于解锁的
EncodedImage

我使用json数据加载图像。如果发送中等大小的图像,它可以正常工作,但当发送较大的图像url时,会出现异常。我不知道如何使用EncodedImage.create(InputStream,int),在方法的int部分定义什么。上面写着小溪的大小,我不明白。你能给我一些例子吗?谢谢这是操作系统本机端的一个例外注意:
javax.imageio.IIOException:Unsupported Image Type
。这是JavaSE抛出的错误。首先检查图像是否确实有效,也许当你下载它时,你没有将整个图像写入存储/文件系统。我认为图像大小在这里很重要,因为只要我用中等大小的图像替换json图像,它就会工作,以前的图像就像3500*2500像素,桌面上的Java可能无法处理这些图像,但我建议只打开下载的图像在查看器中,并验证它是否正常工作是的,它在查看器中正常工作。如何使用EncodedImage.create(InputStream,int)。我不知道应该在方法的“int”部分添加什么。在文档中,它被描述为流的大小。如何知道流或文件的大小