0

私はactionscript 3を初めて使用するので、ご協力をよろしくお願いします。基本的に、私がやろうとしているのは、すべて同じサイズと解像度の2つ以上の外部画像をロードし、それらを互いに結合または合成し、その結果をjpegまたはpngエンコーダーを使用して新しい画像として保存することです。

ステージのスナップショットを撮りたくありません。元の解像度で画像を保存したいと思います。これまでのところ、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!");
    }


}

}

4

2 に答える 2

0

時間を割いて知識を提供していただきありがとうございます。それはさらに役に立ちました。あなたがくれたコードは、1 つの例外を除いて完全に機能しました。「ホルダー」変数は、関数の外で宣言する必要があります。アクセスエラーが少し発生しましたが、関数の外に配置すると問題なく動作しました。

とにかく、保存する機能を追加してコードを拡張しました。「saveButt_mc」というインスタンス名でムービークリップをステージに配置しました。次に、fileReference を使用して保存する機能を追加しました。私の目標は、php を使用してサーバーに自動保存することですが、今のところこれを行う必要があります。

これが私の最終的なコードです。助けてくれてありがとう。

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

}

}

于 2012-03-11T19:40:04.893 に答える
0

まず、両方のLoaderオブジェクトを別の「ホルダー」オブジェクトに入れます。

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

後で"complete"イベント ハンドラーで:

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

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

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

于 2012-03-11T01:37:04.203 に答える