2009-08-03 5 views
1

Je travaille actuellement dans FlexSDK/AS3 et j'ai une toile contenant de nombreux objets. La toile est grande - environ 4K x 4K pixels, et je fais beaucoup de mise à l'échelle/zoom/défilement. La fenêtre est seulement autour de 800x450.Limiter le filtre à l'écran visible - Actionscript 3

J'essaie d'appliquer un filtre de flou sur la toile - que j'ai compris et il fonctionne très bien, sauf pour ce petit bug:

Un filtre est pas appliquée si l'image obtenue dépasse les dimensions maximales. Dans AIR 1.5 et Flash Player 10, la largeur ou la hauteur maximale est de 8 191 pixels et le nombre total de pixels ne peut pas dépasser 16 777 215 pixels. (Ainsi, si une image a une largeur de 8 191 pixels, elle ne peut être que de 2 048 pixels.) Dans Flash Player 9 et les versions antérieures et AIR 1.1 et antérieures, la limite est de 2 880 pixels et 2 880 pixels. Si, par exemple, vous effectuez un zoom avant sur un clip de grande taille avec un filtre appliqué, le filtre est désactivé si l'image résultante dépasse les dimensions maximales. - Docs AS3

Lorsque j'effectue un zoom arrière, mon filtre fonctionne correctement. Mais en zoomant, la limitation des pixels est brisée et le filtre ne fonctionne pas.

Étant donné que je n'ai besoin que de la zone de l'écran actuellement visible pour flouter - la section 800x450 - est-il possible de ne brouiller sélectivement que cette partie de l'écran?

Répondre

2

Je ne pense pas que vous pouvez assigner une région d'un objet DisplayObject auquel appliquer un filtre. C'est tout ou rien.

Quelle est la complexité du contenu de la zone de dessin? Les éléments sont-ils interactifs? Pouvez-vous les diviser en rectangles plus petits et les placer dans une grille?

S'il s'agit d'une image ou d'un groupe d'images, vous pouvez copier la partie visible dans un objet BitmapData. Vous devez masquer la grande zone de dessin et afficher uniquement les données bitmap à l'aide d'un objet Bitmap. Vous pouvez ajouter un écouteur sur les événements de zoom et de défilement, puis mettre à jour BitmapData et Bitmap si nécessaire.

S'il s'agit d'un groupe de contrôles interactifs, je pense que votre meilleure option est de les composer en une grille. Vous pouvez ensuite appliquer un flou à toutes les cellules de la grille (chacune étant plus petite). Sachez que flouter tant de pixels sera un véritable bourreau de performance!