C# wpf应用程序中的图像控制不';不能正确地显示图像

C# wpf应用程序中的图像控制不';不能正确地显示图像,c#,wpf,image,C#,Wpf,Image,若实际图像的大小大于控件的属性,我会使图像失真。例如:图像为800x600,控件仅为200x200 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 = loadImageFromArr

若实际图像的大小大于控件的属性,我会使图像失真。例如:图像为800x600,控件仅为200x200

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];
    }
}
尝试播放图像。拉伸,但没有一个值不能正确显示。我想控制调整图像大小而不裁剪和显示它。图像为jpeg格式

VS2013,WPF,netfw 4.0

抱歉,伙计们,我找到了答案。BitmapCacheOptions中包含问题。使用BitmapCacheOption.OnLoad,一切都很好。不知道为什么OnDemand仅适用于小图像。将发布作为答案。

当您设置内容时,内容将调整大小以适应目标维度,同时保留其本机纵横比

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

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

请参阅备注部分,了解从加载后立即关闭的流加载位图帧时为什么必须使用
OnLoad