2010-11-24 16 views
2

画像の読み込みに疲れていました。私のサンプルコードは、8191ピクセルより大きい大きい画像を読み込もうとしましたが、Event.COMPLETEが送出されていません。 Flash Player 10のBitmapDataの制限があるので、この8191ピクセルの制限よりも大きな画像を読み込むことはできませんか?この問題を回避する方法はありますか?大きな画像読み込みの問題

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

答えて

3

画像を分割することをおすすめします。あなたが画像を1つ(移動、スケーリング)として扱うためにFlashが必要な場合は、画像部分を子要素として追加するホルダークラスを作成します。

以下のテストコードを追加しました。コードhereを見てください。 (SWFがロードされるのを待ちます)。

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

分割とマージは、しかし、痛みの一種です。 – boring

+0

こんにちはマティアスは返事をありがとう、私たちは分割を行うためにビットマップデータが必要ですか?私の場合、画像ロード完了イベントは、ビットマップにアクセスするためにディスパッチされません。私は、私はいくつかのフィルタ効果を適用し、最終的な画像を保存するように、この画像をフラッシュで操作する必要があると述べた。 – Kannan

+0

マティアスの指摘は、すでにサーバー上のイメージを分割してから、その部分を読み込むことです。 – grapefrukt

関連する問題