Коллекция изображений WPF в ListView без использования пути к файлу - PullRequest
1 голос
/ 14 июля 2020

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

Есть ли способ добавить растровые изображения в список без файла путь в источнике?

Я уже могу записать изображения на диск, а затем отобразить их в ListView. Проблема с этим методом - количество изображений. Машина будет делать 3 снимка каждую секунду, пока она работает 24/7. Подозреваю, что в ближайшее время я уничтожу SSD.

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

Спасибо за ваш совет.

Мне не удалось заставить это работать: https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.imaging.bitmapsource?redirectedfrom=MSDN&view=netcore-3.1 Я думал, что это был самым многообещающим. Но я использую System.Drawing.Imaging.

1 Ответ

2 голосов
/ 14 июля 2020

Ваша модель представления должна предоставлять свойство коллекции, которое имеет ImageSource или BitmapSource в качестве типа элемента:

Для преобразования из Sytem.Drawing.Bitmap в BitmapSource см., Например, этот вопрос: быстрое преобразование Bitmap в BitmapSource wpf , или это: Загрузить BitmapImage WPF из System.Drawing.Bitmap

public class ViewModel
{
    public ObservableCollection<BitmapSource> Images { get; }
        = new ObservableCollection<BitmapSource>();

    public void AddImage(System.Drawing.Bitmap bitmap)
    {
        Images.Add(Convert(bitmap));
    }

    public static BitmapSource Convert(System.Drawing.Bitmap bitmap)
    {
        ...
    }
}

Назначить экземпляр модели представления для DataContext из представление и заполните коллекцию:

public partial class MainWindow : Window
{
    private readonly ViewModel viewModel = new ViewModel();

    public MainWindow()
    {
        InitializeComponent();
        DataContext = viewModel;
    }
}

Свяжите ListBox следующим образом:

<ListBox ItemsSource="{Binding Images}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...