JAI: чтение в 12-битных файлах JPEG
Я новичок в Java Advanced Imaging, и первым камнем преткновения, которого я достиг, является способность читать 12-битный однополосный JPEG-файл в оттенках серого. Я видел ссылки на то, что это возможно с JAI, но нет кода или даже предложений о том, как это должно быть сделано. Может ли кто-нибудь помочь мне с полезной ссылкой или коротким фрагментом кода?
До сих пор я использовал это руководство, но оно не помогло мне в этом вопросе.
Благодарю.
2 ответа
JAI-ImageIO зарегистрируется в API Java ImageIO, так что вы сможете использовать его, просто поместив jai-imageio jar в ваш путь к классу, вызывая обычные методы ImageIO, такие как ImageIO.read(файл).
Проблема с jpeg может заключаться в том, что у Java есть читатель jpeg по умолчанию в IIORegistry, и вам, возможно, придется выбрать правильный читатель вручную, используя что-то вроде ImageIO.getImageReadersForFormatName().
Другая вещь, связанная с более эзотерическими форматами, заключается в том, что JAI ImageIO обычно имеет две реализации - одну на чистом Java, а другую - на собственных двоичных библиотеках, поэтому убедитесь, что вы включили *lib-wrapper.dll (или любую другую, подходящую для вашей конкретной ОС) в LD_LiBRARY_PATH или есть в рабочем каталоге вашей программы. Нативная реализация обычно поддерживает варианты формата режима, чем чисто-Java.
Мы обычно читаем 12-битные изображения в оттенках серого в формате JPEG, используя JAI + JAI Image I / O.
В дополнение к предыдущим ответам вам нужны собственные двоичные библиотеки для чтения JPEG 12bit, поэтому необходима библиотека mediaLib.
Вам нужна только операция ImageRead из Image I/O:
byte[] imageBytes = ...
RenderedOp readImage = JAI.create("ImageRead", new MemoryImageInputStream(imageBytes));
Когда вы обычно читаете файлы изображений с FTP, так что получите byte[]
и нужен обычай MemoryImageInputStream
это оборачивает byte[]
в ImageInputStream
путем подклассов ImageInputStreamImpl
,