Question

I'm making a Windows Phone 7 application which involves getting large images from the web and putting it in a ScrollViewer for the user to scroll through. I think I'm hitting a limitation of BitmapImage, though, as the image seems to get cut off at 2048 pixels in either height or width.

Is this a known limitation of Silverlight BitmapImage and is there some other class to use in this case to allow scrolling through the large images?

Thanks

Was it helpful?

Solution

Yes, there is a limit of 2k x 2k. This is limitation and a workaround are described in the white paper "Creating High Performing Silverlight Applications for Windows Phone" http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3a8636bf-185f-449a-a0ce-83502b9ec0ec

Size Limitations: Since the Windows Phone camera is 5 MP and the screen resolution is smaller than on other platforms, the limits for images that can be processed are 2k x 2k pixels. Anything larger than that will be automatically sampled at a lower resolution and the image will lose some richness. Processing Images Larger than 2k x 2k There are scenarios where you need to process images larger than 2k x 2k, e.g. Photo editor, or cropping images. In those scenarios, you can process the images that are larger than 2k x 2k into a file, and then display a portion that fits into 2K x 2K. You can use the combination of WriteableBitmap with LoadJpeg to do it.   Example #5 – LoadingLargeImages

XAML:

<StackPanel>
    <Image Height="3000" Width="3000" Name="image1" Stretch="Fill" />
    <Button Content="Load" Height="70" Width="152" Click="btnLoad_Click" />
</StackPanel>

Code Behind:

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;
}

Things to Know When Using Larger than 2k x 2k Images:

  • It is significantly slower to display
  • Do NOT use it for animation or panning scenarios.

The Resize method of the WriteableBitmapEx can also be used for this task if no JPEG stream is available.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top