WPF应用程序中的图像显示小于在外部查看器中查看时的图像

jos*_*hls 7 wpf image sizing

当我在我的WPF应用程序中显示JPEG(使用下面的代码)时,它显示比我在Windows Picture Viewer中以实际大小打开JPEG时要小得多.

我已经在运行时钻进了我的ImageSource的属性,我的图像有:

  • DPI为219
  • 高度238.02739726027397
  • 宽度312.54794520547944
  • PixelHeight为543
  • 和PixelWidth为713

当我使用屏幕标尺来测量图像的WPF显示时,我得到了大约.313x240像素(如果我可以完美地定位标尺,则可能等于ImageSource报告的宽度和高度.).

我的直觉告诉我这与WPF使用独立于设备的单位(而不是像素)有关,但我无法理解它,我仍然需要知道如何以'实际'尺寸显示图像543x713在我的申请中.

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300" Width="300">
    <StackPanel>
        <Image Source="Image15.jpg" Stretch="None" />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

jos*_*hls 9

谢谢马克!我根据你的信息做了一些谷歌搜索,发现这篇文章提供了一个解决方案,以获得我想要的结果.现在开始有意义......

编辑:Linkrot.粘贴文章中的关键文本以供参考....

<Image Source=”{Binding …}”
       Stretch=”Uniform”
       Width=”{Binding Source.PixelWidth,RelativeSource={RelativeSource Self}}”
       Height=”{Binding Source.PixelHeight,RelativeSource={RelativeSource Self}}” />
Run Code Online (Sandbox Code Playgroud)

这里我们将Stretch设置为Uniform并将Width和Height绑定到PixelWidth和Source的PixelHeight,实际上忽略了DPI.然而,即使使用SnapToDevicePixels(它只是捕捉边框,而不是图像中的像素),图像也不会是像素>完美的.但是,3.5 SP1中的WPF将支持NearestNeighbor> BitmapScalingMode,它应该更正此问题.


Mar*_*som 6

使用 96 的 DPI。WPF 根据以英寸为单位的大小缩放图像,而图像查看器显示像素。在大多数 Windows 系统上,假定屏幕分辨率为 96 DPI,因此在图像中使用它会导致一对一转换。