如何在wpf中将多个PNG图像显示为GIF?

5q4ezhmt  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(150)

我正在研究一个wpf项目。我有40个透明背景的PNG文件,当我把它们拼接在一起时,它们就像一个自然的加载栏。我不想把它做成GIF,而是像PNG格式加载到UI中。
我所做的尝试如下:
1.使用UI线程的重复实现:我发现了巨大的资源消耗。它被认为不合适。

  1. WpfAnimatedGif库:使用所需的40个PNG文件是不合适的。
    如果你有什么好主意,请回复。
kse8i1jr

kse8i1jr1#

假设你在XAML中有一个名为imageImage元素,并且你的png文件的路径在一个名为imagePathsList<string>中,你可以使用一个计时器:

private void UpdateLoadingBar()
{
    var frameIndex = 0;
    var frameCount = imagePaths.Count;
        
    var timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromMilliseconds(100);
    timer.Tick += (sender, e) =>
    {
        loadingImage.Source = new BitmapImage(
            new Uri(imagePaths[frameIndex], UriKind.RelativeOrAbsolute));

        if (++frameIndex >= frameCount)
        {
            // Stop the timer when all frames have been displayed
            timer.Stop();
        }
    };

    timer.Start();
}

或者如果你熟悉异步编程,你可以使用

private async Task UpdateLoadingBar()
{
    foreach (var imagePath in imagePaths)
    {
        loadingImage.Source = new BitmapImage(
            new Uri(imagePath, UriKind.RelativeOrAbsolute));

        // Delay between each frame (adjust the duration as needed)
        await Task.Delay(100);
    }
}

这需要从异步事件处理程序启动,如:

private async void StartLoadingButton_Click(object sender, RoutedEventArgs e)
{
    await UpdateLoadingBar();
}

相关问题