#java #image #tiff
#java #изображение #tiff
Вопрос:
В программе Java у меня есть массив с плавающей точкой размером 1024 x 1024. Как я могу записать файл TIFF, соответствующий изображению, представленному этим массивом?
Пояснения:
- Я прошу фрагмент кода, иллюстрирующий, как написать TIFF, соответствующий массиву с плавающей точкой.
- Я ищу изображение в оттенках серого.
- Я знаю, как преобразовать массив чисел с плавающей точкой размером 1024 x 1024 в любой другой массив числовых значений размером 1024 x 1024; например, если для метода, который вы имеете в виду, требуется, скажем, 1024 x 1024 числа с плавающей точкой в диапазоне [0, 1.0), без проблем, я знаю, как преобразовать мои данные так, чтобы это ограничение соблюдалось.
Спасибо!
kjo
Комментарии:
1. Что представляют
float
значения — масштаб серого изображения размером 1024×1024 пикселей?
Ответ №1:
Проблема, с которой вы столкнетесь, заключается в том, что, хотя для пиксельных данных в TIFF возможно иметь значения с плавающей запятой, это не является частью базовой спецификации. TIFF — это достаточно размытая спецификация, позволяющая использовать выборки с плавающей запятой, но не для стандартизации их семантического значения. Например, у меня был клиент, у которого были образцы с плавающей запятой, сгенерированные Java-приложением (я полагаю, с использованием ImageJ), и он ожидал, что мы прочитаем их правильно. ImageJ поместили плохо сериализованную хэш-таблицу в одну из строк описания, поэтому мне пришлось предоставить им код, который работал бы для этого примера файла, но, вероятно, ни для каких других. Не будь таким Java-приложением. И если вы собираетесь использовать ImageJ для записи значений с плавающей запятой, нормализуйте свои данные между 0 и 1, потому что тогда я могу гарантировать, что, по крайней мере, мои инструменты будут правильно их считывать, не завися от семантического значения.
Хотя в спецификации baseline указано, что выборки по 16 бит на канал не являются частью базовой линии, они с большей вероятностью будут распознаны текущими потребителями TIFF. Таким образом, в долгосрочной перспективе вам может быть удобнее писать в оттенках серого с 16-битными выборками в диапазоне 0 .. 65535, если вы одержимы написанием TIFF.
Если вы думаете, что собираетесь написать несоответствующий TIFF формат, просто напишите свой собственный формат файла и опубликуйте спецификацию и код чтения и записи. Если вы преобразуете его в TIFF, вы все равно создаете новый формат, и вы нарушите работу большинства приложений, использующих TIFF, в качестве побочного эффекта. Что лучше для экосистемы?
Помните, когда вы пишете плохой TIFF, ангел поджигается.
Ответ №2:
AFAIU JAI может записывать файлы TIFF.
Ответ №3:
Каноническим стандартом для обработки изображений в формате TIFF является библиотека libtiff, которая написана на C. Можно вызвать собственный C-код из Java.
Комментарии:
1. Да, есть собственный интерфейс Java (JNI).