c# - WPF 图像集合到 ListView 而不使用文件路径
问题描述
我正在开发一个视觉应用程序,并且有一个相机可以拍摄照片并将它们作为位图存储在一个集合中。
有没有办法将位图图像添加到源中没有文件路径的列表视图?
我已经可以将图像写入磁盘,然后在 ListView 中显示它们。该方法的问题在于图像的数量。机器将在 24/7 运行时每秒拍摄 3 张照片。我怀疑我会在短时间内摧毁SSD。
所以我想找到一个更好的方法。我不必使用 listView 并且到目前为止我看到的所有示例都是使用磁盘文件路径的各种风格。如果有更好的收藏可以使用,我很乐意改变。
谢谢你的建议。
我无法让它工作:https ://docs.microsoft.com/en-us/dotnet/api/system.windows.media.imaging.bitmapsource?redirectedfrom=MSDN&view=netcore-3.1我认为这是最有希望的. 但我正在使用 System.Drawing.Imaging。
解决方案
您的视图模型应该公开一个具有ImageSource
或BitmapSource
作为元素类型的集合属性:
对于从Sytem.Drawing.Bitmap
to的转换BitmapSource
,请参见例如这个问题:fast convert Bitmap to BitmapSource wpf,或者这个:Load a WPF BitmapImage from a 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>
推荐阅读
- google-sheets - 当 GoogleSheet 中 CA 列中的单元格更改为是时向我发送电子邮件
- git - Git 仓库和用户名管理
- python - window.print() 在 Firefox 中修改/恢复首选项,
- javascript - 无法按索引从数组中删除项目
- flutter - 无法在带有 BluetoothThermalPrinter 包的 Chrome 设备上运行 Flutter web
- python - 如何使输出打印出数字列表?
- python - Python如何删除文本文件中特定字符串之后或之前的特定行数
- java - 如何在 flink sql 中将多集数据类型转换为字符串?
- git - 如何在 android studio 中重置代码并获得新的 repo
- angular - Rxjs combineLatest 确实在订阅中返回 observable