我是WPF的新手,面对以下问题。 我正在显示一个位图,xaml:
<ControlTemplate x:Key="MyEditorImageTemplate">
<Image VerticalAlignment="Top" Margin="3,1,0,0"
RenderOptions.BitmapScalingMode="NearestNeighbor"
Stretch="None">
<Image.Source>
<MultiBinding Converter="{StaticResource MyEditorConverter}">
<Binding Path="....." />
Bitmap来自BitmapSource,提供以下方式:
Bitmap^ bitmap = System::Drawing::Image::FromHbitmap((IntPtr)aBmp);
IntPtr hbmp = bitmap->GetHbitmap();
BitmapSource bs =
Imaging::CreateBitmapSourceFromHBitmap(hbmp,
System::IntPtr::Zero,
Int32Rect(0,0,nWidth,nHeight),
BitmapSizeOptions::FromEmptyOptions());
现在这个工作正常,直到我的窗口缩放级别为100%。 如果我在Windows中将其更改为125%:
位图也在GUI上放大。
据我所知,这是预期的,但有没有办法让我仍然显示1-1像素大小,忽略了Windows缩放设置?
答案 0 :(得分:0)
好的,我找到了解决方案。 您只需要一个自己的Image类,派生自Image,并简单地覆盖OnRender,您可以在其中处理正确的大小调整(如果需要)。
protected override void OnRender(DrawingContext dc)
{
//base.OnRender(dc); --> we do out own painting
Rect targetRect = new Rect(RenderSize);
PresentationSource ps = PresentationSource.FromVisual(this);
if (ps != null && Source != null)
{
Matrix fromDevice = ps.CompositionTarget.TransformFromDevice;
Vector currentVisibleSize = new Vector(Source.Width, Source.Height);
Vector originalRestoredSize = fromDevice.Transform(currentVisibleSize);
targetRect = new Rect(new Size(originalRestoredSize.X, originalRestoredSize.Y));
}
dc.DrawImage(Source, targetRect);
}
有了这个,无论Windows缩放设置如何,您将始终拥有100%的原始尺寸。 我从这个网站得到了这个想法:http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx