wpf应用程序中的图像控制;无法正确显示图像

本文关键字:图像 显示图 显示 应用程序 控制 wpf | 更新日期: 2023-09-27 18:23:54

如果实际图像的大小大于控件的属性,则图像失真。例如:图像为800 x 600,控件仅为200 x 200。

System.Windows.Controls.Image im = new System.Windows.Controls.Image();
im.Stretch = Stretch.None ;
im.Width = 200;
im.Height = 200;
im.Margin = new Thickness(5, 5, 5, 5);
im.Source = loadImageFromArray(m_imgs[f]);
private BitmapSource loadImageFromArray(Byte[] imageData)
{
    using (MemoryStream ms = new MemoryStream(imageData))
    {
        var decoder = BitmapDecoder.Create(ms,
            BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnDemand);
        return decoder.Frames[0];
    }
}

尝试使用Image.Stretch,但没有一个值不能正确显示。我希望控件在不裁剪和显示图像的情况下调整图像大小。图像为jpeg格式。

VS2013,WPF,netfw 4.0。

UPD:对不起,伙计们,但我找到了答案。BitmapCacheOptions中包含问题。使用BitmapCacheOption.OnLoad一切都很好。不知道为什么OnDemand只适用于小图像。将帖子作为答案。

wpf应用程序中的图像控制;无法正确显示图像

问题出在缓存选项中。正如Clemens所指出的,如果您希望在位图创建后关闭bitmapStream,我们需要选择OnLoad缓存选项。

设置Uniform时,将调整内容的大小以适应目标维度,同时保留其原生纵横比。

   System.Windows.Controls.Image im = new System.Windows.Controls.Image();
   im.Stretch = Stretch.Uniform;
   im.MaxHeight = 200;
   im.MaxWidth = 200;