2012-03-11 13 views
0

私はactionscript 3の新機能ですので、あらかじめ何か助けていただきありがとうございます。私がしようとしているのは、2つ以上の外部画像、すべて同じサイズと解像度をロードし、それらを結合したり合成したりして、その結果をjpegまたはpngエンコーダを使用して新しい画像として保存することです。Actionscript 3 Load> Combine>と外部画像の保存

私はステージのスナップショットを撮りたくありません。イメージを元の解像度で保存したいと思います。これまで私ができることは、2つの画像を読み込んでステージ上に合成することだけでした。それについて。

誰かがこれを達成する方法についていくつかの洞察力を与えることができますか?私は、Flash pro CS5.5を使用しており、タイムラインではなくクラスファイルにコードを記述しています。ここにコードのコピーがあります。

package 

{

import flash.display.MovieClip; 
import flash.display.Loader; 
import flash.net.URLRequest; 
import flash.events.*; 
import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.utils.ByteArray; 


public class imageComposite extends MovieClip 
{ 

    var images:Array = ["koala.png","koala2.png"];//two images 

    public function imageComposite() 
    { 
     // constructor code 
     var thumbLoader:Loader; 

     for (var i:uint = 0; i < images.length; i++) 
     { 

      thumbLoader = new Loader; 
      thumbLoader.load(new URLRequest(("assets/" + images[i]))); 
      addChild(thumbLoader); 
     } 
     thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,bmpData); 
    } 


    public function bmpData(evt:Event):void 
    { 

     trace("Event was completed successfully!"); 
    } 


} 

}

答えて

0

まず、別個の "ホルダ" オブジェクトに両方Loaderオブジェクトを置きます。

後で "complete"イベントハンドラで
// constructor code 
var holder:Sprite = new Sprite(); 
addChild(holder); 

var thumbLoader:Loader; 

for (var i:uint = 0; i < images.length; i++) 
{ 

    thumbLoader = new Loader; 
    thumbLoader.load(new URLRequest(("assets/" + images[i]))); 
    holder.addChild(thumbLoader); 
} 
... 

var bitmapData:BitmapData = new BitmapData(holder.width, holder.height, false); 
bitmapData.draw(holder); 

var byteArray:ByteArray = PNGEncoder.encode(bitmapData); 

その後、サーバーまたはディスク(デスクトップAIRアプリケーション)にこのbyteArrayオブジェクトを書くことができます。

0

あなたの知識を提供するために時間をとってくれてありがとう、それはもっと役に立ちました。あなたが私に与えたコードは1つの例外を除いて完全に機能しました。 "holder"変数は関数外で宣言しなければなりません。私はアクセスエラーの少しビットを持っていましたが、私はそれをうまく機能した機能の外に置いた。

とにかく、コードを保存して保存する機能が追加されました。インスタンス名が「saveButt_mc」のステージ上にmovieClipを配置するだけです。次に、fileReferenceを使用して保存する機能を追加しました。私の目標は、PHPを使用してサーバに自動保存することですが、今のところこれを行う必要があります。

Heres私の最終的なコード、もう一度助けてくれてありがとう。

-D

package 

{

import flash.display.MovieClip; 
import flash.display.Loader; 
import flash.net.URLRequest; 
import flash.events.*; 
import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.utils.ByteArray; 
import flash.display.Sprite; 
import flash.net.FileReference; 
import flash.net.FileFilter; 

import com.adobe.images.PNGEncoder; 


public class imageComposite extends MovieClip 
{ 

    var images:Array = ["koala.png","koala2.png"];//two images 
    var holder:Sprite = new Sprite(); 

    public function imageComposite() 
    { 
     // constructor code 
     addChild(holder); 
     var thumbLoader:Loader; 

     for (var i:uint = 0; i < images.length; i++) 
     { 

      thumbLoader = new Loader ; 
      thumbLoader.load(new URLRequest(("assets/" + images[i]))); 
      holder.addChild(thumbLoader); 

     } 
     //thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, bmpData); 

     saveButt_mc.addEventListener(MouseEvent.CLICK, bmpData); 
     addChild(saveButt_mc); 
     saveButt_mc.buttonMode = true; 
    } 
    //need contentLoaderInfo to access loader data; 

    public function bmpData(evt:Event):void 
    { 
     var bitmapData:BitmapData = new BitmapData(holder.width,holder.height,false); 
     bitmapData.draw(holder); 
     var byteArray:ByteArray = PNGEncoder.encode(bitmapData); 

     var file:FileReference = new FileReference(); 
     file.save(byteArray, "newImage.jpg"); 

     trace("Event was completed successfully!"); 
    } 

} 

}

関連する問題