Масштабирование изображения до нескольких размеров для Deep Zoom - PullRequest
1 голос
/ 17 сентября 2009

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

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

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

  1. Для каждого требуемого изображения масштабируйте исходное полноразмерное изображение до требуемого размера. Однако масштабирование полного изображения до очень маленьких размеров кажется чрезмерным.
  2. После масштабирования с одного уровня на следующий отбрасывают исходное изображение и масштабируют каждое последующее масштабированное изображение как источник следующего меньшего изображения. Однако я подозреваю, что это приведет к созданию изображений в диапазоне 256-64 с низкой точностью, чем при использовании опции 1.

Обратите внимание, что в отличие от Deep Zoom Composer, этот инструмент должен работать по требованию, поэтому его необходимо завершить в разумные сроки (максимум 30 секунд). Что касается плюсов, я создаю только одно многомасштабное изображение, а не пирамиду из нескольких изображений в высоком разрешении.

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

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

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

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

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

2 голосов
/ 01 апреля 2010

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

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

1 голос
/ 17 сентября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...