使用多个图片在UWP中生成动态动画

使用多个图片在UWP中生成动态动画,uwp,Uwp,我在我的UWP项目中使用gif,它将生成动态图片。但有时我发现gif动态图片会导致图片出现奇怪的破损。我想可能是内存问题造成的 <Image x:Name="voiceBarGif" Opacity="1" Source="ms-appx:///Assets/VoiceBar/waveform.gif" /> cs代码如下: private void button_Click(object sender, RoutedEvent

我在我的UWP项目中使用gif,它将生成动态图片。但有时我发现gif动态图片会导致图片出现奇怪的破损。我想可能是内存问题造成的

 <Image x:Name="voiceBarGif" Opacity="1" 
                       Source="ms-appx:///Assets/VoiceBar/waveform.gif" />
cs代码如下:

  private void button_Click(object sender, RoutedEventArgs e)
    {
        std2.Begin();
    }

最好用代码来处理这个问题

  • 将位图图像的资源位置从网格更改为页面,以使其更易于查找

    <Page.Resources>
    <BitmapImage x:Key="key1" UriSource="Assets/1.png" />
    <BitmapImage x:Key="key2" UriSource="Assets/2.png" />
    <BitmapImage x:Key="key3" UriSource="Assets/3.png" />
    <BitmapImage x:Key="key4" UriSource="Assets/4.png" />
    <BitmapImage x:Key="key5" UriSource="Assets/5.png" />
    <BitmapImage x:Key="key6" UriSource="Assets/6.png" />
    <BitmapImage x:Key="key7" UriSource="Assets/7.png" />
    <BitmapImage x:Key="key8" UriSource="Assets/8.png" />
    <BitmapImage x:Key="key9" UriSource="Assets/9.png" />
    <BitmapImage x:Key="key10" UriSource="Assets/10.png" />
    <BitmapImage x:Key="key11" UriSource="Assets/11.png" />
    <BitmapImage x:Key="key12" UriSource="Assets/12.png" />
    <BitmapImage x:Key="key13" UriSource="Assets/13.png" />
    <BitmapImage x:Key="key14" UriSource="Assets/14.png" /> </Page.Resources>
    
  • 运行时,前几秒钟的闪烁似乎是由于加载图像所需的时间。
    我认为通过提前读取代码中的图像并将其创建为位图图像,可以解决此问题。

    最好使用代码处理此问题

  • 将位图图像的资源位置从网格更改为页面,以使其更易于查找

    <Page.Resources>
    <BitmapImage x:Key="key1" UriSource="Assets/1.png" />
    <BitmapImage x:Key="key2" UriSource="Assets/2.png" />
    <BitmapImage x:Key="key3" UriSource="Assets/3.png" />
    <BitmapImage x:Key="key4" UriSource="Assets/4.png" />
    <BitmapImage x:Key="key5" UriSource="Assets/5.png" />
    <BitmapImage x:Key="key6" UriSource="Assets/6.png" />
    <BitmapImage x:Key="key7" UriSource="Assets/7.png" />
    <BitmapImage x:Key="key8" UriSource="Assets/8.png" />
    <BitmapImage x:Key="key9" UriSource="Assets/9.png" />
    <BitmapImage x:Key="key10" UriSource="Assets/10.png" />
    <BitmapImage x:Key="key11" UriSource="Assets/11.png" />
    <BitmapImage x:Key="key12" UriSource="Assets/12.png" />
    <BitmapImage x:Key="key13" UriSource="Assets/13.png" />
    <BitmapImage x:Key="key14" UriSource="Assets/14.png" /> </Page.Resources>
    
  • 运行时,前几秒钟的闪烁似乎是由于加载图像所需的时间。
    我认为这个问题可以通过提前读取代码中的图像并将其创建为位图图像来解决。

    请共享您的代码。添加代码,请查看我的主要帖子。这可以通过Win2D解决,但是您能否将gif文件上传到某个地方以便我们进行测试,或者在GitHub上上传一个简单的重新制作项目?如果UWP中的
    图像
    控件出现问题,则应予以修复。此博客可能会有问题。@MartinZikmund我将代码上传到此处:git@github.com:tomxue/pictureAnimationInUWP.git,您可以在Assets/wave.gif中找到gif文件谢谢您的帮助!请分享你的代码添加代码,请查看我的主要帖子。这可以用Win2D解决,但是你能把gif文件上传到某个地方,这样我们就可以进行测试,或者在GitHub上上传一个简单的复制项目吗?如果UWP中的
    图像
    控件出现问题,则应予以修复。此博客可能会有问题。@MartinZikmund我将代码上传到此处:git@github.com:tomxue/pictureAnimationInUWP.git,您可以在Assets/wave.gif中找到gif文件谢谢您的帮助!非常感谢。这种方法工作得很好,尽管它存在您提到的问题。我会按照你的建议努力改进的。谢谢!这种方法工作得很好,尽管它存在您提到的问题。我会按照你的建议努力改进的。
        int index = 0;
        while(true)
        {
            index++;
            var bitmap = this.Resources[$"key{index}"] as BitmapImage;
            image1.Source = bitmap;
            await Task.Delay(30);
            if (index == 14)
                index = 0;
        }