#c# #wpf #zooming #imaging #pan
#c# #wpf #масштабирование #создание изображений #панорамирование
Вопрос:
В настоящее время я работаю над приложением, которому необходимо отображать большие инженерные чертежи размером 8800×6800 или больше. В требованиях указано, что пользователь должен иметь возможность панорамировать изображение. В идеале, они хотели бы также иметь возможность комментировать изображения. Если вы посмотрите на Windows Photo Viewer, вы увидите производительность и функции, которые я собираюсь имитировать, за вычетом части аннотаций.
До сих пор я пробовал несколько разных подходов к отображению изображений, и, похоже, ни один из них не обеспечивает той производительности, которую я ищу. Они либо занимают много памяти, либо работают медленно. Вот подходы, которые я использовал:
Viewbox
сImage
в качестве дочернего элемента. Использование памяти в порядке, но изменение размераViewbox
происходит медленно. Из-за этого я еще не пробовал масштабирование / панорамирование с помощью этого подхода.InkCanvas
сImage
набором либо в качестве фона, либо в качестве дочернего элемента. При таком подходе масштабирование / панорамирование с помощьюScaleTransform
иTranslateTransform
казалось так себе, но использование памяти могло быть в диапазоне 450-600 МБ.
Это мой первый опыт работы с изображениями с помощью .NET / WPF, и мои знания по этому вопросу довольно ограничены. Каковы некоторые рекомендации по работе с большими изображениями, особенно с WPF? Я читал, что разбиение изображения на плитки (например, глубокое масштабирование) может помочь, но не был уверен, как это сделать, или это лучшая идея в моей ситуации. Знаете ли вы какие-либо ресурсы, которые могли бы помочь мне лучше понять это?
Комментарии:
1. Вы решили эту проблему в конце концов?
Ответ №1:
Под «разбиением на листы», если вы подразумеваете разделение изображения на отдельные части и одновременное отображение только небольшого подмножества для повышения производительности, это можно было бы назвать «виртуализацией».
У Microsoft есть отличный блог о виртуализации элементов и даже предоставляется эталонная реализация VirtualCanvas, которую вы можете использовать в качестве отправной точки для виртуализированного элемента управления.
Ссылка здесь:https://learn.microsoft.com/en-us/archive/blogs/jgoldb/virtualized-wpf-canvas
Обратите внимание, что в этом блоге масштабирование включено как часть обсуждения, а также обсуждение плавной прокрутки и упреждающей загрузки плиток для лучшей отзывчивости пользовательского интерфейса.