Image的ActualHeight和ActualWidth属性与DecodePixelHeight / Width不同

时间:2014-07-28 13:34:45

标签: c# image windows-phone-8

我正在使用Windows phone 8应用程序,我需要在其中显示一些图像。我接受了一个图像控件(没有指定尺寸)并且正在传递一个ImageUri(指向本地存储器)并且在转换器中返回一个BitmapImage,DecodePixelHeight / Width分别设置为300。它的工作正常,除了诺基亚Lumia 920手机(我在Lumia 520,Lumia 820,HTC 8S和Lumia 920中测试过)。在920中进行测试时,在image_loaded事件中,即使图像源的DecodePixelheight / Width每个显示为300,图像的ActualHeight / Width也为480。为什么会这样? (隔离存储中的图像尺寸也为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;

screen shot taken in lumia 520

screen shot taken in lumia 920

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

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为DecodePixelHeight / Width只会将图像解码为该大小。实际呈现的大小取决于其他变量(宽度和高度)。

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

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

我不太确切知道你要完成什么,但我想你正在将从该函数返回的图像分配给某种控件。我的建议是你给那个控件一个固定的宽度和高度,看看它是如何工作的。