2010-03-12 8 views
1

Vous avez essayé de lisser les images chargées avec FileReferece sans succès. Voici le code que je utilise:Comment lisser une image chargée avec FileReference?

fileRef = new FileReference(); 
fileRef.addEventListener(Event.COMPLETE, fileLoaded); 

private function fileLoaded(e:Event):void{ 
    var ldr:Loader = new Loader();    
    ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{ 
     var bm:Bitmap = Bitmap(e.target.content as Bitmap); 
     bm.smoothing = true; 
     img.load(bm) 
    }); 
    ldr.loadBytes(fileRef.data); 
} 

<custom:SWFLoaderAdvanced id="img"/> 

bm.smoothing aurait dû lissée l'image chargée, mais pour une raison quelconque, il ne fonctionne pas. Est-ce que j'ai râté quelque chose?

Remarque: SWFLoaderAdvanced lissera automatiquement toute image chargée à l'intérieur. Cela fonctionne parfaitement avec les images chargées autres que celles chargées avec FileReference.

Répondre

0

Je ne sais pas pourquoi bm.smoothing ne fonctionne pas, peut-être il est, mais l'effet est à peine perceptible. Une chose que vous pourriez essayer est un BlurFilter.

import flash.filters.BlurFilter; 
var blur:BlurFilter = new BlurFilter(1, 1, 5); 

Lorsque les premier et deuxième arguments sont blurX et blurY, et le troisième est la qualité. Je suppose que vous pouvez appliquer à un objet Bitmap, probablement en utilisant cette fonction:

bitmapDataObject.applyFilter(); 

Cette fonction est détaillée plus loin dans la référence AS3; Je ne suis pas sur un ordinateur avec Flash installé, donc je ne peux pas tester exactement comment cela fonctionnerait. Cependant, vous pourrez certainement appliquer des effets de flou aux objets Bitmap, et si vous en faites un très léger avec une qualité élevée, l'image sera lisse. Découvrez BlurFilter et BitmapData dans les docs.

Espérons que cela aide!

+0

Merci pour la solution de contournement. Je suis à peu près sûr qu'il n'y a pas de lissage - c'est très visible. Toujours à la recherche d'une solution. – Yeti

1

Je crois que les données sont chargées dans la mémoire flash comme byteArray, essayez et voyez ce qui se passe.

votre ligne ici:

var bm:Bitmap = Bitmap(e.target.content as Bitmap); 

veut être:

var bm:Bitmap = new Bitmap(e.target.content as BitmapData); 
+0

essayé et il jette un ReferenceError: Erreur # 1069: données de propriété introuvable sur flash.display.LoaderInfo et il n'y a pas de valeur par défaut. – Yeti

+0

vous avez raison, c'était mon erreur et se confondre avec les classes Loader. il aurait dû lire 'e.target.content' comme indiqué dans votre exemple. édité pour réparer. – longstaff

Questions connexes