【问题标题】:How to display a Bitmap Windows zoom level (DPI?) independent in WPF如何在 WPF 中独立显示位图 Windows 缩放级别(DPI?)
【发布时间】:2015-09-16 22:44:38
【问题描述】:

我是 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 缩放设置?

【问题讨论】:

    标签: wpf bitmap zooming dpi


    【解决方案1】:

    好的,我找到了解决方案。 您只需要一个从 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

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2023-04-09
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多