2016-12-16 5 views
1

Je vais forcer un BitmapData lisse.flex/as3 - Comment forcer BitmapData lisse à ne pas dessiner

mais je ne peux pas faire BitmapData.draw() parce que les performances de l'application. Si je dessine Bitmap, l'application ralentit à l'étape suivante.

(c'est sur flex mobile)

donc j'ai besoin de comment forcer bitmapData lisse sans redessiner bitmapData.

(aussi, je ne peux pas utiliser Bitmap(bitmapData).smoothing)

ce que je peux faire pour cela?

+0

essayer d'utiliser la texture et le rendu gpu, recherchez [cadre Starling] (https://www.google.com/search?q=as3+starling+smooth+ texture) –

Répondre

1

Vous supposez que la seule façon de lisser les pixels dans un bitmapData consiste à redessiner le conteneur bitmap avec le paramètre boolean lissé à BitmapData.Draw().

La solution est de définir smoothing sur le conteneur Bitmap objet lui-même, pas le interne bitmapData. Plus tard, vous pouvez toujours mettre à jour bitmapData mais l'objet Bitmap sera toujours lissé.

Logic est quelque chose comme ci-dessous:

var myBMPData : BitmapData = new BitmapData(320, 240); 
myBMPData.draw(someThing); //just draw, no smoothing here for BitmapData 

var myBMP : Bitmap = new Bitmap(myBitmapData); 
myBMP.smoothing = true; //use smoothing on Bitmap that holds bitmapData 

addChild(myBMP); 
+0

merci, mais j'ai dit que je ne peux pas utiliser Bitmap.smoothing là-bas ... – idnumberone

+0

Non, vous avez dit que vous ne pouvez pas utiliser (citation) 'Bitmap (bitmapData) .smoothing» qui vise toujours le bitmapData lui-même. Si BMPdata est 100w x 100h, vous forcez le processeur à gérer 10 000 éléments (pixels). Je suggère 'Bitmap.smoothing' qui cible seulement 1 élément pour l'effort du processeur et aucun' draw'ing est impliqué. Cela semble étrange mais c'est comme ça ... Je le vois même dans les logiciels graphiques 3D (1 million de polys sélectionnés pour se déplacer = lent VS 1 groupe d'objet contenant les mêmes millions de polys = rapide). Donc ** lisser le conteneur ** pas les pixels individuels (bitmapdata). Le résultat de l'effet visuel est le même. –

+0

Afficher l'exemple de code de ** comment recréer votre problème ** ... Y at-il une raison technique ou une limitation pour laquelle vous ne pouvez pas utiliser Bitmap.smoothing? Sinon, vous devez écrire votre propre filtre bi-linéaire pour le lissage. Essayez d'utiliser certains gpu [** Pixel Bender lisse **] (http://www.smart-page.net/blog/2010/02/21/smartaa-reconstruct-anti-aliasing-with-pixel-bender/) dans votre projet AS3. Vérifiez les tutoriels en ligne comment importer PBJ à utiliser comme objet '= new shader()' dans le code AS3. Ce n'est qu'un exemple de toute façon. –