2010-11-24 21 views
2

Ich hatte müde ein Bild laden eine URL unten ist meine Beispielcode, wenn versucht, ein großes Bild zu laden, die größer als 8191 Pixel in der Breite oder Höhe der Event.COMPLETE ist nicht versandt, ich bin mir bewusst des Flash Player 10 BitmapData limit, also können wir kein Bild laden, das größer ist als das Limit von 8191 Pixeln, gibt es einen Workaround für diese Oder eine andere Methode, die Sie vorschlagen?großes Bild laden Problem

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); 
     } 

Antwort

3

Ich würde empfehlen, dass Sie die Bilder aufteilen. Wenn Sie Flash benötigen, um die Bilder als eine (Bewegung, Skalierung) zu behandeln, würde ich eine Halter-Klasse schreiben, die die Bildteile als Kinder von sich selbst hinzufügt.

Ich habe unten einen Code und einen Link zu einem Test hinzugefügt. Sehen Sie sich den Code in Aktion here an. (Warten Sie, bis die SWF geladen ist).

// 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

Teilung und das Verschmelzen ist eine Art obwohl der Schmerz. – boring

+0

Hallo Mattias danke für die Antwort, brauchen wir nicht die BitmapData um das Splitting zu machen? In meinem Fall wird das Ereignis zum vollständigen Laden des Bildes nicht für den Zugriff auf die Bitmap ausgelöst. Wie gesagt, ich brauche dieses Bild im Flash zu manipulieren, indem ich einige Filtereffekte anwende und das fertige Bild speichere. – Kannan

+0

Ich denke, Mattias 'Standpunkt ist, dass du das Image schon auf dem Server aufteilen solltest und dann die Teile einspielen sollst. – grapefrukt

Verwandte Themen