Libary/ метод для загрузки HDR/ изображения с высоким битрейтом и доступа к значениям его пикселей?

Короткий;
Мне нужно получить значение определенного пикселя из поставляемого изображения с высокой глубиной цвета.

Подробности:
В настоящее время я использую "Обработка" для создания программы сканирования с разрезом. По сути, я использую изображение в оттенках серого, чтобы выбрать кадры из анимации, и использую пиксели из этих кадров, чтобы создать новое изображение.

Например, если серое изображение имеет черный пиксель, оно берет тот же пиксель в первом кадре и добавляет его к изображению. Если это белый пиксель, он делает то же самое с последним кадром.
Все, что находится между ними, естественно, выбирает промежуточные кадры.

Суть в том, что если указать горизонтальный градиент и видео о закате, то у вас будет начало заката слева, медленно переходящее к концу справа.

Моя проблема заключается в том, что при использовании обработки я, кажется, могу получить только значения шкалы серого от 0 до 255, используя библиотеку по умолчанию.
Черный = 0
Белый = 255
Это ограничивает меня в использовании только 256 кадров для исходной анимации или в том, чтобы терпеть нечеткое, гладкое конечное изображение.

Мне действительно нужно иметь возможность предоставлять и, таким образом, получать значения пикселей в гораздо большем диапазоне. Сказать,
Черный = 0
Белый = 65025

Есть ли Java-библиотека, которая может это сделать? Что я могу предоставить, скажем, HDR Tiff или TGA файл изображения и уметь читать из него весь спектр цветов?

Спасибо,

1 ответ

Хорошо, нашел отличную библиотеку для этого; https://code.google.com/p/pngj/

Поддерживает полный набор функций PNG - включая 16-битные оттенки серого или полноцветные изображения. Позволяет мне извлечь строки из изображения, затем пиксели из этих строк.

PngReader pngr = new PngReader(new File(filename));
tmrows = pngr.readRows();
ImageLineInt neededline = (ImageLineInt)tmrows.getImageLine(y);

if (neededline.imgInfo.greyscale==true){

   //get the right pixel for greyscale
     value = neededline.getScanline()[x];

} else {          

   //get the right pixel for RGB
     value  = neededline.getScanline()[x*3];
}

Вы просто умножаете на 3, так как линия сканирования состоит из RGBRGBRGB (и т. Д.) Для полноцветного изображения без альфа.

Другие вопросы по тегам