我是动作脚本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!");
}
}
}
答案 0 :(得分: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应用程序)。
答案 1 :(得分:0)
非常感谢你花时间提供你的知识,这更有帮助。你给我的代码完美地处理了一个例外。必须在函数之外声明“holder”变量。我得到了一点访问错误,但是当我把它放在函数之外时它运行得很好。
无论如何,我已经扩展了添加保存功能的代码。我只是在舞台上放了一个movieClip,实例名称为“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!");
}
}
}