Silverlight中的BitmapImage大小限制

Raj*_*enK 2 silverlight bitmapimage windows-phone-7

我正在制作一个Windows Phone 7应用程序,它涉及从Web获取大图像并将其放入ScrollViewer供用户滚动.不过,我认为我正在受到限制BitmapImage,因为图像似乎在高度或宽度上都被切割成2048像素.

这是Silverlight的已知限制BitmapImage吗?在这种情况下是否允许使用其他类来滚动大图像?

谢谢

Ren*_*lte 7

是的,有2k x 2k的限制.这是一个限制,解决方法在白皮书"为Windows Phone创建高性能Silverlight应用程序"中进行了描述http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3a8636bf-185f-449a- a0ce-83502b9ec0ec

大小限制:由于Windows Phone摄像头为5 MP且屏幕分辨率小于其他平台,因此可处理图像的限制为2k x 2k像素.任何大于此值的东西都会以较低的分辨率自动采样,图像会失去一些丰富度.处理大于2k x 2k的图像在某些情况下,您需要处理大于2k x 2k的图像,例如照片编辑器或裁剪图像.在这些情况下,您可以将大于2k x 2k的图像处理成文件,然后显示适合2K x 2K的部分.您可以使用WriteableBitmap和LoadJpeg的组合来执行此操作.示例#5 - LoadingLargeImages

XAML:

<StackPanel>
    <Image Height="3000" Width="3000" Name="image1" Stretch="Fill" />
    <Button Content="Load" Height="70" Width="152" Click="btnLoad_Click" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

代码背后:

private void btnLoad_Click(object sender, RoutedEventArgs e)
{
    StreamResourceInfo sri = null;
    Uri uri = new                                                                           Uri("LoadJpegSample;component/Test3k3k.JPG", UriKind.Relative);
    sri = Application.GetResourceStream(uri);

    WriteableBitmap wb = new WriteableBitmap((int)this.image1.Width, (int)this.image1.Height);

    Extensions.LoadJpeg(wb, sri.Stream);
    this.image1.Source = wb;
}
Run Code Online (Sandbox Code Playgroud)

使用大于2k x 2k图像时需要了解的事项:

  • 它显示得慢得多
  • 不要将它用于动画或平移场景.

如果没有可用的JPEG流,则WriteableBitmapEx的Resize方法也可用于此任务.