我是 Java Advanced Imaging 的新手,遇到的第一个障碍是读取 12 位、单波段、灰度 JPEG 文件的能力。我已经看到对 JAI 的引用,但没有代码甚至没有关于应该如何完成的建议。有人可以通过有用的链接或简短的代码片段来帮助我吗?
到目前为止,我一直在使用本教程,但它在这个问题上对我没有帮助。
谢谢。
我是 Java Advanced Imaging 的新手,遇到的第一个障碍是读取 12 位、单波段、灰度 JPEG 文件的能力。我已经看到对 JAI 的引用,但没有代码甚至没有关于应该如何完成的建议。有人可以通过有用的链接或简短的代码片段来帮助我吗?
到目前为止,我一直在使用本教程,但它在这个问题上对我没有帮助。
谢谢。
JAI-ImageIO 会将自己注册到 Java 的 ImageIO api 中,因此您应该能够通过在类路径中使用 jai-imageio jar 并调用正常的 ImageIO 方法(例如 ImageIO.read(file))来使用它。
jpeg 的问题可能是 Java 在 IIORegistry 中有一个默认的 jpeg 阅读器,您可能必须使用 ImageIO.getImageReadersForFormatName() 之类的东西手动选择正确的阅读器。
更深奥的格式的另一件事是 JAI ImageIO 通常有两种实现 - 一种是纯 Java,另一种使用本机二进制库,因此请确保在LD_LiBRARY_PATH 或在程序的工作目录中。本机实现通常支持模式格式变体,而不是纯 java 的。
我们通常使用 JAI + JAI Image I/O 读取 JPEG 12bit 灰度图像。
除了以前的答案,您需要本机二进制库来读取 JPEG 12 位,因此需要 mediaLib 库。
您只需要 Image I/O 中的“ImageRead”操作:
byte[] imageBytes = ...
RenderedOp readImage = JAI.create("ImageRead", new MemoryImageInputStream(imageBytes));
通常从 FTP 读取图像文件,因此byte[]
需要通过子类化MemoryImageInputStream
将 a 包装byte[]
到 a中的自定义。ImageInputStream
ImageInputStreamImpl