C# 图像';s ActualHeight和ActualWidth属性与像素高度/宽度不同

C# 图像';s ActualHeight和ActualWidth属性与像素高度/宽度不同,c#,image,windows-phone-8,C#,Image,Windows Phone 8,我正在开发一个WindowsPhone8应用程序,在那里我需要显示一些图像。我获取了一个图像控件(没有指定维度),并传递了一个ImageUri(指向本地存储),在转换器中,我返回了一个BitmapImage,其中DecodePixelHeight/Width设置为300。除了诺基亚Lumia 920手机(我在Lumia 520、Lumia 820、HTC 8S和Lumia 920中进行了测试)之外,它的工作状态很好。在920中测试时,在图像_加载事件中,图像的实际高度/宽度为480,即使图像源的

我正在开发一个WindowsPhone8应用程序,在那里我需要显示一些图像。我获取了一个图像控件(没有指定维度),并传递了一个ImageUri(指向本地存储),在转换器中,我返回了一个BitmapImage,其中DecodePixelHeight/Width设置为300。除了诺基亚Lumia 920手机(我在Lumia 520、Lumia 820、HTC 8S和Lumia 920中进行了测试)之外,它的工作状态很好。在920中测试时,在图像_加载事件中,图像的实际高度/宽度为480,即使图像源的解码像素高度/宽度显示为300。为什么会这样?(隔离存储器中的图像尺寸也为300x300)

这是我的转换器代码:

    BitmapImage image = new BitmapImage();

    image.DecodePixelType = DecodePixelType.Logical;
    image.CreateOptions = BitmapCreateOptions.BackgroundCreation;
    image.CreateOptions = BitmapCreateOptions.DelayCreation;
    image.DecodePixelHeight = 300;
    image.DecodePixelWidth = 300;
    using (var stream = LoadFile(path.ToString()))
    {
         if (stream != null)
         {
             image.SetSource(stream);
         }
    }
    return image;


我从两个原始屏幕截图中剪切了相同的区域。

这是因为解码像素的高度/宽度只会使被解码的图像达到该大小。实际显示的大小取决于其他变量(宽度和高度)

在Lumia 920中,结果不同的事实是因为该设备具有WXGA(768x1280)分辨率,而所有其他设备都具有WVGA分辨率(480x800)

这会使图像重新缩放,以适应WXGA手机分辨率的宽度/高度


我不太清楚您到底想完成什么,但我猜您是在将从该函数返回的图像分配给某种控件。我的建议是,给该控件一个固定的宽度和高度,然后看看效果如何。

如果不希望图像重新缩放以更好地适应Lumia 920这样的高分辨率屏幕,请使用DecodePixelType.Physical。