.NET将像素转换为点并创建错误的图像大小

问题描述:

我有一个尺寸为144像素的图像(我使用irfanView和Photoshop测量图像大小)。.NET将像素转换为点并创建错误的图像大小

但是,使用以下xaml在窗口中打开时,由ActualWidth参数和同一图形软件测量的图像宽度为192像素。

事实证明,141点= 192像素(1pt = 1.33px)。

因此,.Net打开图像,以像素为单位测量它的大小,并以相同的大小绘制图像,但以点为单位。

下面是代码:

<Window x:Class="test_image_resizing.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" WindowState="Maximized" Loaded="Window_Loaded"> 
    <Grid> 
     <Image 
      x:Name="test" 
      VerticalAlignment="Top" 
      HorizontalAlignment="Center" 
      Stretch="None" 
      Source="/test%20image%20resizing;component/Resources/Test.png" /> 
    </Grid> 
</Window> 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show("test=" + test.ActualWidth.ToString()); 
} 

WPF观看图象的DPI显示它之前。如果您的图像宽度为144像素,则保存为96 dpi;那么在大多数计算机上,WPF将显示为144像素宽(因为大多数计算机都设置为96 dpi屏幕分辨率)。

如果您的图像以不同的dpi保存,那么WPF将根据您的屏幕分辨率以它认为“真实”尺寸显示它。 WPF会尝试以预期的“英寸”大小显示图像,这会考虑图像的dpi。

+0

谢谢,图像确实保存为72dpi。恢复到96dpi解决了这个问题。 – Doigen 2011-04-10 06:11:13

您可以在Paint.net中打开图像,然后打开图像|调整大小...对话框。 您可以在那里看到DPI并根据需要进行调整。