【发布时间】:2015-02-12 17:35:56
【问题描述】:
我的 midlet 可以正常显示一些图像,但不能显示其他图像。
它们都是 8 位 PNG,但没有显示的是我自己在 PhotoShop 中创建的。
所以我在想我的 PhotoShop (CS6) 设置可能是错误的......
PNG-8,选择性,扩散,颜色:256,抖动:100%,哑光:无,Web 捕捉:0%,转换为 sRGB:勾选,宽度:48,高度:48,百分比:100%, 质量:双三次。
我已经尝试了其中一些设置,但无济于事。
有什么想法吗?
有一个 similar problem here 但这与我的相反,因为 PhotoShop 在这种情况下会修补东西,而不是破坏东西......
我的代码是...
image = Image.createImage("/img/loading1.png");
...这是我的堆栈跟踪:
java.io.EOFException
at javax.imageio.stream.ImageInputStreamImpl.readFully(
ImageInputStreamImpl.java:353)
at java.io.DataInputStream.readUTF(DataInputStream.java:609)
at javax.imageio.stream.ImageInputStreamImpl.readUTF(ImageInputStreamImpl.java:332)
at com.sun.kvem.png.PNGImageReader.parse_iTXt_chunk(PNGImageReader.java:447)
at com.sun.kvem.png.PNGImageReader.readMetadata(PNGImageReader.java:650)
at com.sun.kvem.png.PNGImageReader.readImage(PNGImageReader.java:1312)
at com.sun.kvem.png.PNGImageReader.read(PNGImageReader.java:1582)
at com.sun.kvem.midp.GraphicsBridge.loadImage(GraphicsBridge.java:2602)
at com.sun.kvem.midp.GraphicsBridge.createImageFromData(GraphicsBridge.java:2511)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.kvem.sublime.MethodExecution.process(MethodExecution.java:42)
at com.sun.kvem.sublime.SublimeExecutor.processRequest(SublimeExecutor.java:63)
at javax.microedition.lcdui.Image.createImage(Image.java:315)
有问题的图像确实存在 - 无论是在项目中还是在构建的 jar 中。
这是有问题的图像:
【问题讨论】:
-
在使用前尝试使用 PNGout 或 Optipng 工具优化 png。这些工具会剔除任何不必要的数据并针对 J2ME 兼容性对其进行优化。
-
谢谢,但知道如何使用它吗?我找到了这个教程,但我没有更聪明...advsys.net/ken/util/pngout.htm
-
我找到了另一个推荐使用
pngout.exe loading1.png loading1out.png的教程。 -
iTxt块中似乎有一些意外的文本。使用 Photoshop 的 Save for Web,您可以选择不包含任何元数据——试试吧。 -
@Jongware 谢谢 - 删除元数据已经成功了。您想添加它作为答案,以便我接受。
标签: java-me png emulation photoshop java-wireless-toolkit