Масштабирование изображения до нескольких размеров для Deep Zoom

StackOverflow https://stackoverflow.com/questions/1438488

Вопрос

Предположим, у меня есть растровое изображение с квадратным аспектом и шириной 2048 пикселей.

Чтобы создать набор файлов, необходимый для DeepZoomImageTileSource Silverlight, мне нужно масштабировать это растровое изображение до 1024, затем до 512, затем до 256 и т. д. до 1 пиксельного изображения.

Есть два, я подозреваю, наивных, подхода: -

<Ол>
  • Для каждого требуемого изображения масштабируйте исходное полноразмерное изображение до требуемого размера. Однако масштабирование полного изображения до очень маленьких размеров кажется чрезмерным.
  • После масштабирования с одного уровня на следующий отбрасывают исходное изображение и масштабируют каждое последующее масштабированное изображение как источник следующего меньшего изображения. Однако я подозреваю, что это приведет к созданию изображений в диапазоне 256-64 с низкой точностью, чем при использовании варианта 1.
  • Обратите внимание, что в отличие от Deep Zoom Composer этот инструмент должен работать по требованию, поэтому его необходимо завершить в разумные сроки (максимум 30 секунд). С другой стороны, я создаю только одно многомасштабное изображение, а не пирамиду из нескольких изображений с высоким разрешением.

    Я нахожусь за пределами моей зоны комфорта, какие-нибудь эксперты в области графики получили какие-либо советы? Я не прав насчет пункта 2? Является ли пункт 1 достаточно эффективным, и я ни о чем не беспокоюсь? Вариант 3?

    Это было полезно?

    Решение

    Около 1: это кажется лучшим способом. И это не так уж и чрезмерно, если вы не перезагружаете исходное изображение каждый раз.

    Около 2: Да, вы бы потеряли (немного) качество, масштабируя его по шагам.

    Я думаю, 30 секунд должно быть достаточно для масштабирования изображения (несколько раз). Любая оптимизация будет связана с кэшированием результатов.

    Другие советы

    По сути, вы пытаетесь создать MipMaps (см. http://en.wikipedia.org / вики / Mipmap ). Если вы начнете с изображения размером 2 квадрата, то уменьшите изображение до половины его размера, а затем используйте уменьшенное изображение, чтобы уменьшить его размер еще на 2, и получите те же результаты, что и исходное изображение и его уменьшение на коэффициент 4.

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

    Так что я бы сказал, что вы будете в порядке с последовательным уменьшением изображений, как вы упомянули в варианте 2. Если вы хотите быть уверены, попробуйте оба способа и сравните изображения.

    Я понимаю, что этот вопрос старый, и, возможно, есть причина, по которой вы этого не сделали, но если вы получаете бесплатный Deep Zoom Composer от Microsoft, он поставляется с библиотекой DLL для создания Deep Zooms, "DeepZoomTools.dll". Он создаст композиции Deep Zoom одного изображения или композиты из множества изображений. (Класс ImageCreator выполняет тяжелую работу по изменению размера изображений).

    Вам следует изучить последствия лицензирования, если вы разрабатываете коммерческое приложение, но повторное использование кода всегда лучше, чем его написание самостоятельно.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top