【问题标题】:Corrupted images when dynamically loading ImageSource from image resource从图像资源动态加载 ImageSource 时损坏的图像
【发布时间】:2026-01-27 14:55:01
【问题描述】:

我有一个 WPF 登录屏幕,我想将启动图像动态加载到其中。大多数情况下,图像加载正常,但可能有十分之一的图像显示已损坏,如下所示。

在 XAML 中,我有一个简单的图像控件。

<Image x:Name="imgLogonSplash" Stretch="None" Width="800" Height="489"/>

我通过绑定在我的视图模型中执行此操作,但为了简单起见,我现在在我的代码中添加了这一行。

imgLogonSplash.Source = new BitmapImage(new Uri($"pack://application:,,,/Company.myapp;component/{splashImagepath}"));

上面的 SplashImagePath 提供了要加载的图像的名称。这些图像是主程序集中的 .png 文件,并标记为“资源”。

我尝试了几种加载图像的方法,包括在下面的视图模型中。谁能解释为什么这不能正常工作?

BitmapImage image = new BitmapImage();
image.BeginInit();

string imageUri = $"pack://application:,,,/Company.myapp;component/{splashImagePath}";

image.UriSource = new Uri(imageUri, UriKind.Absolute);

image.EndInit();
return image;

【问题讨论】:

  • 可能是时间问题。如果你在 await.task.delay(200); 中设置任何源异步并敲击设置源后,问题就消失了吗?
  • 我试试安迪
  • 这就是我正在做的@Clemens。最上面的例子是我当前的代码。底部是我尝试过的其他代码的示例,结果相同。
  • 图片是否多次加载? (使用断点检查。)图像文件是否被其他应用程序使用 - VS 或图像编辑器或应用程序的先前挂起实例?
  • @BentTranberg 这不是图像文件,而是程序集资源。

标签: c# wpf imagesource


【解决方案1】:

我会检查您正在使用的图像的分辨率(可能是图像文件的大小),如果它们非常大并且您运行此应用程序的系统没有硬件内存(图形)来呈现图片。

尝试使用简单而小尺寸的图片。

希望这会有所帮助。

【讨论】: