我正在制作一个 Windows Phone 7 应用程序,该应用程序涉及从 Web 获取大图像并将其放入一个ScrollViewer
供用户滚动浏览的应用程序中。不过,我认为我遇到了BitmapImage
2048 像素的限制,因为图像的高度或宽度似乎都被截断了。
这是 Silverlight 的已知限制BitmapImage
吗?在这种情况下是否有其他类可以使用以允许滚动大图像?
谢谢
我正在制作一个 Windows Phone 7 应用程序,该应用程序涉及从 Web 获取大图像并将其放入一个ScrollViewer
供用户滚动浏览的应用程序中。不过,我认为我遇到了BitmapImage
2048 像素的限制,因为图像的高度或宽度似乎都被截断了。
这是 Silverlight 的已知限制BitmapImage
吗?在这种情况下是否有其他类可以使用以允许滚动大图像?
谢谢
是的,有 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 – 加载大图像
XAML:
<StackPanel>
<Image Height="3000" Width="3000" Name="image1" Stretch="Fill" />
<Button Content="Load" Height="70" Width="152" Click="btnLoad_Click" />
</StackPanel>
代码背后:
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;
}
使用大于 2k x 2k 图像时需要了解的事项:
- 显示速度明显变慢
- 不要将其用于动画或平移场景。
如果没有可用的 JPEG 流, WriteableBitmapEx的 Resize 方法也可用于此任务。