如果实际图像的大小大于对照的属性,我的图像会失真。例如:图像为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仅适用于小图像。将帖子作为答案。答案 0 :(得分:1)
问题出在缓存选项中。正如Clemens指出的那样,如果您希望在创建位图后关闭OnLoad
,我们需要选择bitmapStream
缓存选项。
答案 1 :(得分:0)
设置Uniform
时,内容会调整大小以适应目标维度,同时保留其原始宽高比。
System.Windows.Controls.Image im = new System.Windows.Controls.Image();
im.Stretch = Stretch.Uniform;
im.MaxHeight = 200;
im.MaxWidth = 200;