Общая память изображений Wpf

Я хочу оптимизировать использование памяти в своем приложении WPF. Я хочу загрузить с диска изображение в формате jpg и показать его в реальном размере. И тут я хочу показать 5 обрезанных квадратных участков исходного изображения, загруженного с диска. (Никакое изменение размера не применяется ни к одному изображению). Я хочу сделать все это, загрузив исходное изображение один раз и разделив эти данные между элементами управления изображением таким образом, чтобы память не тратилась впустую, а все элементы управления извлекали данные из одной и той же области памяти.

Я попытался использовать объект потока памяти, но в конце концов из-за некоторых преобразований между растровым изображением и растровым изображением я скопировал данные.

Можете ли вы предоставить минимальный воспроизводимый пример, показывающий код, который вы пробовали? stackoverflow.com/help/минимально-воспроизводимый-пример Вам будет сложно помочь, если мы не сможем воспроизвести проблему, с которой вы столкнулись.

TJ Rockefeller 31.05.2019 17:37

Кроме того, вы можете перефразировать свой вопрос. Справочная информация полезна, но сейчас все, что у вас есть, это список требований, а чего у вас нет, так это одного четкого и краткого вопроса. Вы также можете посмотреть статью Stackoverflow о том, как задавать хорошие вопросы, здесь stackoverflow.com/help/как спросить

TJ Rockefeller 31.05.2019 17:46

Использовать обрезанный битмап

Clemens 31.05.2019 18:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел интересный способ обрезать изображение из BitmapImage здесь, который, я думаю, решит вашу проблему. Делая это таким образом, вы можете отображать все свои изображения, используя только один BitmapImage

В вашем xaml ваше изображение с полным разрешением будет просто обычным элементом изображения, но ваши обрезанные изображения будут прямоугольным элементом, использующим кисть изображения с определенным полем просмотра. Просто определите прямоугольник с высотой и шириной обрезанного изображения, которое вы хотите, а затем поле просмотра определяется как «высота ширины xy» (в моем примере это «10 20 100 200») и помните, что x начинается с 0 для влево и положительно движется вправо, а y начинается с 0 для вершины и положительно движется вниз.

    <Image Source = "{Binding Image}"></Image>
    <Rectangle Height = "200" Width = "100">
        <Rectangle.Fill>
            <ImageBrush ViewboxUnits = "Absolute" Viewbox = "10,20,100,200" ImageSource = "{Binding Image}"></ImageBrush>
        </Rectangle.Fill>
    </Rectangle>

Обратите внимание, что привязка для Image и ImageBrush одинакова, поэтому вам нужно определить Image только один раз, и он будет использоваться для обоих элементов.

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