Работа с бинарными (1-bit per pixel) изображениями c++

346
30 января 2017, 18:02

Проблема в следующем. Необходимо работать с бинарными изображениями довольно внушительных размеров (100000x100000 пикселей). Изначально делал это с помощью Qt-шного QImage, он поддерживает формат Format_Mono, который хранит изображение как 1-bit per pixel. И в общем-то все было замечательно, пока не оказалось, что QPainter имеет ограниченный растеризатор и рисовать на изображениях чей размер больше short (32767x32767) нельзя, оно просто обрезается. Соответственно, я не смог объединить изображений больше чем на 32767x32767. Затем, я начал присматриваться к отдельным библиотекам. OpenCV, как я понял, не поддерживает такой формат. Что касается ImageMagick, то он поддерживает конструирование объекта как 1-bit per pixel и сохранения его в этом же формате. Однако, во время работы с изображением оно все равно хранится как 8bit per pixel и соответственно тут возникает нехватка оперативной памяти. Затем я начал глядеть в сторону CImg, но тут, как я понимаю, для этих целей тоже все печально, ибо как написано на их сайте

the overall size of the used memory for one instance image (in bytes) is then 'width x height x depth x dim x sizeof(T)

Где sizeof(T) ясное дело не может быть меньше sizeof(char), что опять таки не дает работать из-за ограничений по памяти.

Стало интересно, как же QImage в принципе работает со своим Format_Mono форматом, но, честно говоря, я запутался в исходниках.

В общем, вопрос в следующем. Существуют ли библиотеки в которых реализована возможность работы с бинарными изображениями и при этом хранятся они действительно как 1-bit per pixel при работе с ними?

READ ALSO
отсортировать недосортированный файл

отсортировать недосортированный файл

здравствуйте, есть файл, который до этого частично сортировывалсячастично значит файл состоит, допустим, из такого порядка чисел: 1 2 3 3 5 6 6

320
Как выгрузить с .txt в Mysql?

Как выгрузить с .txt в Mysql?

Здравствуйте, столкнулся с такой проблемой:

346