2009-07-31 5 views
3

J'essaie d'afficher des fichiers image (jpg, png, gif) qui peuvent être plus grands que la zone d'affichage disponible. J'ai incorporé une image dans un cCanvas (pour obtenir le défilement), mais les grandes images ne sont pas complètement affichées.Afficher d'énormes images défilantes dans Image?

De très grandes images (par exemple 2480 x 3507) ont le haut ou le haut et le bas de l'image écrêté avec l'image défilante.

Quel est le plus grand graphique que l'on peut afficher en utilisant mx.controls.Image?

Merci

Répondre

5

La limite de 2880 pixels est pour BitmapDatas, pour DisplayObjects il y a une limite de 8191 pixels. Vous pouvez contourner ces limites en utilisant le BitmapDataUnlimited classe ici: http://code.google.com/p/bitmapdataunlimited/

Cependant, si la performance est important que je vous recommande de laisser ces grandes images se composent de plusieurs plus petits à la place. Même si vous ne réutilisez pas ces plus petits ou si vous vous efforcez de les supprimer de la liste displayList ou de définir leur propriété visible sur false, il y aura toujours un gain de performance car flash détecte automatiquement qu'ils sont en dehors de la scène et n'ont pas à être rendu.

Edit:

J'ai oublié de dire que le 2880px limite applique uniquement lors de la création manuelle BitmapDatas, des images plus grandes que peuvent encore être chargés, et leurs BitmapDatas (qui sont plus grandes que 2880px) sont accessibles et manipulés . Vous pouvez facilement avoir un Bitmap avec une bitmapData aussi grande que la fenêtre, vous pouvez définir ses bitmapData en faisant quelque chose comme:

viewportBitmapData.copyPixels(sourceBitmapData, new Rectangle(x,y,viewportWidth, viewPortHeight), new Point(0,0)) 

Lorsque vous faites, vous pouvez simplement faire ce qui précède sur chaque cadre ou si l'exécution est important, vous pouvez lors du défilement (si scrollingDistance est inférieur à viewportSize) utiliser viewportBitmapData.scroll (x, y) pour décaler la totalité de bitmapData, puis copier uniquement les nouveaux pixels.

+0

Si je pouvais _load_ l'image entière, définir manuellement les barres de défilement, et dessiner juste la zone des données d'image qui correspondent à la fenêtre (compensée par les barres de défilement)? –

4

J'ai lu que la limite est 2880 pixels par dimension en Flash 9. Dans Flash 10 la limite est plus élevée. Vérifiez la version pour laquelle vous compilez.

Vous pouvez potentiellement découper l'image en plus petits morceaux et les assembler en Flex.

0

Si fait une différence qui FlashPlayer vous ciblez:

versions VS bitmapsize maximale

flashplayer -9: 2880x2880 px
flashplayer 10: 4096x4096 px
flashplayer 11: illimité

Questions connexes