2010-10-08 5 views
2

Je crée une application Windows Phone 7 qui consiste à obtenir de grandes images du Web et à les placer dans un ScrollViewer pour que l'utilisateur puisse les parcourir. Je pense que je frappe une limitation de BitmapImage, cependant, car l'image semble être coupée à 2048 pixels en hauteur ou en largeur.BitmapImage restrictions de taille dans Silverlight

Est-ce une limitation connue de Silverlight BitmapImage et existe-t-il une autre classe à utiliser dans ce cas pour permettre le défilement des grandes images?

Merci

Répondre

7

Oui, il existe une limite de 2k x 2k. Ceci est la limitation et une solution de contournement sont décrites dans le livre blanc « Création d'applications Silverlight haute performance pour Windows Phone » http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3a8636bf-185f-449a-a0ce-83502b9ec0ec

Taille Limitations: Comme l'appareil Windows Phone est 5 MP et la résolution de l'écran est plus petite que sur autres plates-formes , les limites pour les images que peuvent être traitées sont 2k x 2k pixels. Rien de plus grand que cela sera échantillonné automatiquement à une résolution inférieure et l'image perdra une certaine richesse. Traitement des images Plus grand que 2k x 2k Il existe scénarios dans lesquels vous devez traiter images supérieures à 2k x 2k, par ex. Photo éditeur ou recadrage d'images. Dans ces scénarios , vous pouvez traiter les images qui sont plus grandes que 2k x 2k dans un fichier , puis afficher une partie correspondant à dans 2K x 2K. Vous pouvez utiliser la combinaison de WriteableBitmap avec LoadJpeg pour le faire. Exemple # 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

Derrière:

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

choses à savoir lors de l'utilisation plus grande que 2k x 2k Images:

  • Il est beaucoup plus lent à afficher
  • Ne l'utilisez PAS pour des scénarios d'animation ou de panoramique.

La méthode Resize du WriteableBitmapEx peut également être utilisé pour cette tâche si aucun flux JPEG est disponible.

+0

C'est une bonne façon de le faire avec des ressources locales, mais comment suggéreriez-vous le faire avec des images distantes d'une URL? – RajenK

+0

Voir l'édition de ma bibliothèque WriteabelBitmapEx. –

Questions connexes