2009-11-06 6 views
1

Dans mon application, un objet canvas a une hauteur = 90 px & width = 86400 px (indiquant le nombre de secondes dans un jour [60 * 60 * 24]). Le canevas est défilable et l'utilisateur peut ajouter ou supprimer des composants dans celui-ci.Impossible de créer un instantané de Canevas

Maintenant, je veux avoir un instantané de toute la toile & rétrécir à la taille 910x30 pour dessiner l'instantané pris dans une autre toile.

Quelqu'un peut-il me dire comment prendre un instantané d'un tel grand composant?

J'ai essayé de prendre un instantané dans l'objet BitmapData mais comme sa largeur maximale est de 2880, je ne peux pas donner un instantané de toile entier.

Y at-il une autre idée possible, si oui, s'il vous plaît faites le moi savoir.

Les suggestions sont les bienvenues.

+0

1 sexe/pixel? Peut-être que vous vouliez dire s/pixel? Ou tout au plus sec/pixel? –

+0

yup, son sec/pixel :) – krishna

Répondre

0

Vous pouvez prendre plusieurs clichés de votre grand canevas, réduire l'encombrement, puis les assembler. Mais tout type de capture bitmap pour un composant aussi grand va être très intensif.

0

Vous pouvez également essayer de définir la propriété scaleX/scaleY sur la zone de dessin afin qu'elle corresponde à la taille de votre 910x30, puis à l'instantané. De cette façon, Flash serait à l'échelle pour vous.

2

Je n'ai pas testé cela, mais que se passerait-il si vous annuliez BitmapData tous ensemble et que vous preniez le résultat directement à partir de l'ordinateur client? comme ceci:

var imgSnapshot:ImageSnapshot = ImageSnapshot.captureImage(savableCanvas,72,new PNGEncoder(),false); 
      var bArray:ByteArray = imgSnapshot.data; 

      var fileRef:FileReference = new FileReference(); 
      fileRef.save(bArray,"mySavedImage.png"); 

Aussi, y at-il des fautes de frappe sur votre question, 86.400 pixels est un enfer d'un grand nombre de données à traiter et vous devriez probablement la manipulation de ce avec un code côté serveur et techniques carrelage (pensez, Google Maps) ... de cette façon, si vous étiez en train de dire en utilisant php, vous pourriez utiliser imagick et recadrer la section créée dynamiquement nécessaire. Maintenant, si c'était 8,640px, alors c'est une autre histoire, regardez dans BitmapDataUnlimited sur Google Code. Et ne vous inquiétez pas, c'est commercial. Cependant, cela a un prix, ce grand canevas doit être géré assez bien, et jeté immédiatement après son utilisation, étant donné qu'un objet bitmapData de 12k x 12k est censé avoir au moins 1Go de mémoire ...

Questions connexes