Как мне справиться с огромным TIF в WPF? - PullRequest
4 голосов
/ 25 февраля 2011

У меня есть 8-битный TIFF, то есть 14406x9606 пикселей, который при загрузке через BitmapImage создает исключение System.OutOfMemoryException.В качестве растрового изображения полной глубины его размер составляет около 400 мегабайт.Есть ли способ разбить изображение на более управляемые куски?Я пытался использовать DecodePixelHeight, чтобы загрузить его с более низким разрешением, и это работает, но затем мне нужно перезагрузить всякий раз, когда изменяется уровень масштабирования.Существуют ли какие-либо инструменты для работы с действительно большими изображениями в WPF с различными уровнями масштабирования?

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Возможно, вы захотите попробовать библиотеку LibTiff.Net . Он написан на чистом C #-коде, бесплатный, с открытым исходным кодом (коммерческая лицензия BSD).

LibTiff.Net может обрабатывать файлы TIFF размером до 4 ГБ и может использоваться для открытия файлов без декодирования всех образцов. Библиотека также поддерживает многополосные и мозаичные файлы TIFF.

Отказ от ответственности: я один из хранителей библиотеки.

1 голос
/ 25 февраля 2011

Нет ничего встроенного, что обрабатывает это напрямую.DecodePixelHeight, как вы упомянули, вероятно, является лучшим вариантом в самой среде.

Однако вы можете использовать что-то вроде C # оболочки для GDAL .GDAL обрабатывает очень большие файлы TIFF, включая файлы с пирамидами, и позволяет (очень быстро) открывать TIFF с различными разрешениями, не загружая весь файл в память.Это все равно потребует обновления / перезагрузки при изменении разрешения, но скорость их загрузки в формате TIFF немного выше, чем у классов обработки изображений, поскольку она предназначена для обработки очень больших изображений.

...