2009-12-30 11 views
0

J'ai un objet BitmapData avec un canal alpha. J'aimerais connaître le moyen le plus rapide pour compenser ce canal alpha dans ActionScript3 (FlashPlayer10). Par décalage, je veux dire déplacer tous les pixels de ce canal dans une direction (en entourant les bordures de l'image) tout en laissant les canaux de couleur comme ils étaient.Transformer un seul canal de l'objet BitmapData

Existe-t-il un bon moyen d'appliquer une telle transformation à un seul canal?

Répondre

0

Je pense que la façon dont j'aborderais ceci est de créer un clone() de l'objet original bitmapData. Laissez l'original intact. Avec le clone, déplacez tous les pixels comme vous le souhaitez. Il n'y a pas de "scroll with carry" intégré mais ce n'est pas trop dur. Voici un code pour un, mais vous pouvez simplifier beaucoup si vous ne faites qu'une direction:

http://www.actionscript.org/forums/showthread.php3?p=767722

après avoir fait défiler, utilisez copyChannel() pour copier le canal alpha de votre clone défiler à l'original.

+0

merci, fonctionne magnifiquement – BuschnicK

0

Vous utiliseriez Adobe PixelBender pour ce type d'opération ou écrivez-le manuellement (en utilisant getVector/setVector) dans ActionScript. Cependant, déplacer le canal alpha sonne comme une mauvaise idée puisque toutes les couleurs sont stockées avec l'alpha prémultiplié.

Cela signifie que vous aurez une perte continue de précision.

+0

hmm, jamais entendu parler du tour Alpha pré-multiplié auparavant. Merci de l'avoir signalé. Je me demande si cela profite vraiment beaucoup à la performance. On dirait un compromis discutable lors de la modification des bitmaps devient beaucoup plus cher à cause de cela ... – BuschnicK