Что библиотека C позволяет масштабировать изображений ginormous?

Рассмотрите следующий файл:

-rw-r--r-- 1 user user 470886479 2009-12-15 08:26 the_known_universe.png

Как Вы уменьшили бы масштаб изображения до разумного разрешения, с помощью не больше, чем 4 ГБ RAM?

Например:

$ convert -scale 7666x3833 the_known_universe.png

Какая библиотека C обработала бы его?

Спасибо!

8
задан Dave Jarvis 20 July 2010 в 19:46
поделиться

6 ответов

Я полагаю, что libpng имеет интерфейс потока. Я думаю, его можно использовать для чтения частей изображения за раз; в зависимости от файла изображения вы можете получить строки по порядку. Затем можно уменьшить каждую строку (например, для уменьшения на 50% уменьшить строку по горизонтали и отбросить каждую вторую строку) и записать в выходной файл.

Использование libpng в C может занять достаточно много кода, но документация довольно хорошо помогает в этом.

http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-3.8

4
ответ дан 5 December 2019 в 20:12
поделиться

Вы можете использовать библиотеку обработки изображений, которая предназначена для выполнения сложных операций с большими (и маленькими) изображениями. Одним из примеров является набор инструментов для создания изображений IM . Он хорошо связывается с C (но хотя бы частично реализован на C ++) и имеет хорошую привязку к Lua. Из привязки Lua должно быть легко экспериментировать.

1
ответ дан 5 December 2019 в 20:12
поделиться

Несколько лет назад я использовал cximage. Я думаю, что последняя версия находится на http://www.xdp.it/cximage.htm после выхода из CodeProject.

Изменить: извините, это C ++, а не C.

1
ответ дан 5 December 2019 в 20:12
поделиться

Задумывались ли вы об изучении изображений на основе пирамид? Представьте себе пирамиду, в которой изображение разделено на несколько слоев, каждый из которых имеет разное разрешение. Каждый слой разбит на плитки. Таким образом, вы можете отображать уменьшенную версию изображения, а также увеличенный частичный вид изображения без необходимости повторного масштабирования.

См. запись в Википедии .

Одним из исходных форматов был FlashPix, для которого я написал средство визуализации. Я также создал новый формат конвертера и рендерера пирамид, который использовался в медицинских приложениях. Настоящий сканер будет производить сканирование более 90 ГБ среза органа для исследования рака. На самом деле алгоритм преобразователя был довольно непростым, чтобы получить эффективные изображения пирамид. Вы не поверите, но на самом деле он был основан на Java и работал намного лучше, чем вы думаете. Используется многопоточность. Бенчмаркинг показал, что вряд ли версия C будет работать намного лучше. Это было 6 лет назад. Первоначальный рендерер, который я создал более 10 лет назад. В наши дни вы больше ничего не слышите об изображениях, основанных на пирамидах. Но на самом деле это единственный эффективный способ создания масштабированных изображений по запросу без создания кешированных масштабированных версий.

Jpeg2000 может иметь или не иметь дополнительную функцию пирамиды.

Я напоминаю, что форматы и преобразования ImageMagick, возможно, включают FlashPix. Поиск в Google по запросу "пирамида изображений" дает некоторые интересные результаты. Верните немного воспоминаний; -)

0
ответ дан 5 December 2019 в 20:12
поделиться

Вы можете попробовать сделать 64-битную сборку ImageMagick или посмотреть, есть ли она. Мой коллега написал в блоге сверхпростой декодер png (предполагается, что у вас есть zlib или его эквивалент), чтобы вы могли увидеть код, который вам понадобится для создания собственного.

http://www.atalasoft.com/cs/blogs/stevehawley/archive/2010/02/23/libpng-you-re-doing-it-wrong.aspx

Вам нужно будет выполнить повторную выборку пока вы его читаете.

1
ответ дан 5 December 2019 в 20:12
поделиться

Если вы можете переместить его в 64-разрядную ОС, вы можете открыть его как файл, сопоставленный с памятью или эквивалент, и использовать практически любую библиотеку, которую вы хотите. Это не будет быстро, и может потребоваться увеличение файла страницы / подкачки (в зависимости от ОС и того, что еще вы хотите с ней сделать), но взамен вы не будете ограничены потоковыми библиотеками, поэтому вы сможете выполнять больше операций, прежде чем переходить к сокращению разрешения или нарезке.

0
ответ дан 5 December 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: