gpt4 book ai didi

WPF - 将许多图像一张一张地加载到 ObservableCollection 中

转载 作者:行者123 更新时间:2023-12-04 00:09:08 24 4
gpt4 key购买 nike

在 WPF 中,我试图将许多(数千)图像加载到 ListBox WrapPanel 中。

我正在尝试以类似于 Windows 资源管理器窗口的方式加载图像。

到目前为止,我的代码可以加载所有图像的名称、位置(作为标签)和占位符图像以加快加载时间:

Dim ofd As New Microsoft.Win32.OpenFileDialog()
ofd.Multiselect = True
ofd.Filter = "JPEG|*.jpg"

If ofd.ShowDialog() Then
For Each f In ofd.FileNames
Items.Add(New With {.img = New BitmapImage(New Uri("pack://application:,,,/Resources/PlaceholderPhoto.png")), .nam = Path.GetFileNameWithoutExtension(f), .tag = f})
Next

'The name of my ObservableCollection is Items'
lstboxPhotos.ItemsSource = Items
End If

那部分很好。我之后要做的是动态加载图像的缩略图(一个接一个)。我这样做是为了让用户可以在加载缩略图时与之交互并查看有多少图像可用。我尝试了几种不同的方法 - 后台工作程序、调度程序和单独的线程。

我用来加载图片的代码如下:

    'i came from me doing a for..next for each image in Items collection'
Dim bmp As New BitmapImage()
bmp.BeginInit()
bmp.DecodePixelWidth = 90
bmp.DecodePixelHeight = 60
bmp.CacheOption = BitmapCacheOption.OnLoad
bmp.UriSource = New Uri(Items.Item(i).tag, UriKind.Absolute)
bmp.EndInit()

Items.Item(i).img = bmp

我在网上搜索过。老实说,我不确定要采取什么方向才能完成我需要做的事情。

如果我需要澄清任何其他事情,请告诉我。先感谢您! :)

编辑:好的所以引用this article ,使用第二个答案,我得到的项目一次加载一个。它加载所有项目的名称都很好,但似乎在大约 40 个项目后停止加载图像。

如果有人能阐明为什么它可能停止加载缩略图,但继续加载项目的名称,那将是一个很大的帮助!谢谢!

最佳答案

您可以使用内置的 TypeConverterstring 文件路径转换为 ​​ImageSource 对象,从而快速轻松地做到这一点。以这个简单的例子为例,它将显示 Pictures 文件夹中所有图像的缩略图:

public ObservableCollection<string> FilePaths { get; set; }

...

FilePaths = new ObservableCollection<string>(Directory.GetFiles(
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)));

...

<ItemsControl ItemsSource="{Binding FilePaths}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" Width="100" Stretch="Uniform" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>

在此示例中,每个 Image.Source 属性都是直接与 FilePaths 集合中的文件路径之一绑定(bind)的数据。

关于WPF - 将许多图像一张一张地加载到 ObservableCollection 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com