2010-11-24 6 views
2

J'avais fatigué de charger une forme d'image une url ci-dessous est mon code d'échantillon, quand j'ai essayé de charger une grande image qui est plus grande que 8191 Pixel dans la largeur ou la taille le Event.COMPLETE n'est pas distribué, de la limite BitmapData du lecteur flash 10, donc nous ne pouvons pas charger une image supérieure à cette limite de 8191 pixels? Y at-il une solution de contournement pour cela ou toute autre méthode que vous proposez de faire?grand problème de chargement d'image

private function loadImage(url:String):void 
          { 
           var request:URLRequest = new URLRequest(url);    
           var imageLoader:Loader = new Loader();    
           var context:LoaderContext; 
           context = new LoaderContext(); 
           context.checkPolicyFile = true; 
           imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, image_completeHandler);  
           imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 

           imageLoader.load(request,context); 
          } 

      private function image_completeHandler(event:Event):void 
      { 
        trace(" Image load Complete"); 
      } 

      private function ioErrorHandler(event:IOErrorEvent):void 
      { 
      trace("ioErrorHandler: " + event); 
     } 

Répondre

3

Je vous recommande de séparer les images. Si vous avez besoin de Flash pour manipuler les images comme une seule (déplacement, mise à l'échelle), j'écrirais une classe-titulaire qui ajoute les images en tant qu'enfants de la même.

J'ai ajouté du code et un lien vers un test ci-dessous. Regardez le code en action here. (attendez que le fichier SWF se charge).

// TestClass

package 
{ 
    import com.kazumakzak.display.TileImage; 

    import flash.display.Sprite; 
    import flash.events.Event; 

    public class TestBigImage extends Sprite 
    { 

     [Embed(source="assets/piece.png")] 
     private var imageClass : Class; 

     private var _image : TileImage; 
     private var _counter : Number = 0; 

     public function TestBigImage() 
     { 
      // create image with tile size 640x480 
      _image = new TileImage(640, 480); 

      // add tiles at positions 
      _image.addTile(new imageClass(), 1, 1); 
      _image.addTile(new imageClass(), 1, 2); 
      _image.addTile(new imageClass(), 2, 1); 
      _image.addTile(new imageClass(), 2, 2); 
      _image.addTile(new imageClass(), 3, 1); 
      _image.addTile(new imageClass(), 3, 2); 

      // add to display list 
      addChild(_image); 


      addEventListener(Event.ENTER_FRAME, render); 
     } 

     private function render(event : Event) : void 
     { 
      _counter += 0.05; 
      _image.x = -640 + Math.cos(_counter) * 640 
     } 
    } 
} 

//TileImage.as

package com.kazumakzak.display 
{ 
    import flash.display.Bitmap; 
    import flash.display.Sprite; 

    public class TileImage extends Sprite 
    { 

     private var _tileWidth : int; 
     private var _tileHeight : int; 

     public function TileImage(tileWidth : int, tileHeight : Number) 
     { 
      _tileWidth = tileWidth; 
      _tileHeight = tileHeight; 
     } 

     public function addTile(source : Bitmap, tileX : int, tileY : int) : void 
     { 
      source.x = (tileX-1) * _tileWidth; 
      source.y = (tileY-1) * _tileHeight; 

      addChild(source); 
     } 
    } 
} 
+0

division et la fusion est une sorte de douleur cependant. – boring

+0

Salut Mattias merci pour la réponse, Dont nous avons besoin de BitmapData pour faire le fractionnement? Dans mon cas, l'événement de chargement de l'image n'est pas distribué pour accéder au bitmap. Comme vous l'avez dit, j'ai besoin que cette image soit manipulée en flash comme pour appliquer certains effets de filtre et sauvegarder l'image finale. – Kannan

+0

Je pense que le point de Mattias est que vous devriez diviser l'image déjà sur le serveur, puis charger dans les parties. – grapefrukt