Эффективное отображение и масштабирование / панорамирование больших изображений в WPF - PullRequest
4 голосов
/ 14 апреля 2011

В настоящее время я работаю над приложением, для которого необходимо отображать большие технические чертежи, которые могут быть размером 8800x6800 или более. Требования гласят, что пользователь должен иметь возможность панорамирования и масштабирования изображения. В идеале, они хотели бы иметь возможность комментировать изображения. Если вы посмотрите на Windows Photo Viewer, вы увидите производительность и функции, которые я собираюсь эмулировать, за исключением части аннотации.

До сих пор я пробовал пару разных подходов к отображению изображений, и ни один из них, похоже, не обеспечивает такую ​​производительность, которую я ищу. Либо они занимают много памяти, либо они работают медленно. Вот подходы, которые я выбрал:

  • Viewbox с Image в детстве. Использование памяти в порядке, но изменение размера Viewbox происходит медленно. Из-за этого я еще не пробовал масштабировать / панорамировать с этим подходом.
  • InkCanvas с Image, установленным в качестве фона или дочернего элемента. При таком подходе масштабирование / панорамирование с помощью ScaleTransform и TranslateTransform выглядело так, но использование памяти могло быть выше в диапазоне 450-600 МБ.

Это мой первый опыт работы с изображениями в .NET / WPF, и мои знания по этому вопросу довольно ограничены. Каковы некоторые рекомендации по работе с большими изображениями, особенно с WPF? Я читал, что мозаичное изображение (например, глубокий зум) может помочь, но не знал, как это сделать, или это лучшая идея в моей ситуации. Знаете ли вы какие-либо ресурсы, которые могли бы помочь мне лучше понять это?

1 Ответ

1 голос
/ 25 июля 2014

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

У Microsoft отличный блог о виртуализации.элементы и даже предоставляет справочную реализацию VirtualCanvas, которую вы можете использовать в качестве отправной точки для виртуализированного элемента управления.

Ссылка здесь: http://blogs.msdn.com/b/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx

Обратите внимание, что этот блог включает в себя масштабирование и масштабирование какчасть обсуждения, а также обсуждение плавной прокрутки и упреждающей загрузки фрагментов для лучшего отклика пользовательского интерфейса.

...