Java JAI:读取12位JPEG文件

Java JAI:读取12位JPEG文件,java,image,jai,Java,Image,Jai,我是Java Advanced Imaging的新手,我遇到的第一个障碍是读取12位、单波段、灰度JPEG文件的能力。我看到有人提到JAI可以实现这一点,但没有代码,甚至没有关于如何实现的建议。有人能帮我提供一个有用的链接或一个简短的代码片段吗 到目前为止,我一直在使用它,但它在这个问题上对我没有帮助 谢谢 JAI ImageIO将自己注册到Java的ImageIO api中,因此您应该能够通过在类路径中使用JAI ImageIO JAR并调用普通ImageIO方法(如ImageIO.read(

我是Java Advanced Imaging的新手,我遇到的第一个障碍是读取12位、单波段、灰度JPEG文件的能力。我看到有人提到JAI可以实现这一点,但没有代码,甚至没有关于如何实现的建议。有人能帮我提供一个有用的链接或一个简短的代码片段吗

到目前为止,我一直在使用它,但它在这个问题上对我没有帮助


谢谢

JAI ImageIO将自己注册到Java的ImageIO api中,因此您应该能够通过在类路径中使用JAI ImageIO JAR并调用普通ImageIO方法(如ImageIO.read(file))来使用它

jpeg的问题可能是Java在iOreRegistry中有一个默认的jpeg读取器,您可能需要使用ImageIO.getImageReadersForFormatName()之类的工具手动选择正确的读取器


另一种更深奥的格式是JAI ImageIO通常有两种实现——一种是纯Java,另一种是使用本机二进制库,因此请确保在LD_LiBRARY_路径中包含*lib-wrapper.dll(或适合您特定操作系统的任何东西),或者在程序的工作目录中包含。与纯java实现相比,本机实现通常支持模式格式变体。

我们通常使用JAI+JAI图像I/O读取JPEG 12位灰度图像

除了前面的答案,您还需要本机二进制库来读取JPEG 12位,因此需要mediaLib库

您只需要从映像I/O执行“ImageRead”操作:

byte[] imageBytes = ...
RenderedOp readImage = JAI.create("ImageRead", new MemoryImageInputStream(imageBytes));
当我们通常从FTP读取图像文件时,请获取
byte[]
,并需要自定义
MemoryImageInputStream
,它通过子类化
ImageInputStreamImpl
byte[]
包装成
ImageInputStream