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只适用于小图像。将帖子作为答案。
问题出在缓存选项中。正如Clemens所指出的,如果您希望在位图创建后关闭bitmapStream
,我们需要选择OnLoad
缓存选项。
设置Uniform
时,将调整内容的大小以适应目标维度,同时保留其原生纵横比。
System.Windows.Controls.Image im = new System.Windows.Controls.Image();
im.Stretch = Stretch.Uniform;
im.MaxHeight = 200;
im.MaxWidth = 200;