0

我是actionscript 3的新手,所以提前感谢您提供的任何帮助。基本上,我要做的是加载 2 个或更多外部图像,大小和分辨率都相同,然后将它们组合或合成一个在另一个之上,然后使用 jpeg 或 png 编码器将该结果保存为新图像。

我不想拍舞台快照,我想以原始分辨率保存图像。到目前为止,我唯一能做的就是加载两张图像,然后在舞台上合成它们。就是这样。

有人可以就如何实现这一点提供一些见解。我正在使用 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

首先,您将两个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 回答
0

非常感谢您花时间提供您的知识,这很有帮助。您给我的代码完美运行,但有一个例外。“持有人”变量必须在函数之外声明。我遇到了一点访问错误,但是当我将它放在函数之外时它工作得很好。

无论如何,我已经扩展了添加保存功能的代码。我只是在舞台上放了一个实例名称为“saveButt_mc”的movieClip。然后添加了使用 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 回答