Pri*_*ome 5 flash displayobject actionscript-3
我在闪存(AS3)中有相机输入应用程序,我在上面绘制一些图形.我想拍摄舞台可见区域的图像快照,但只有视频是我在视频上绘制的图形.我想从图像快照中排除控件.我的显示对象布局如下:
-stage
--canvas (Sprite)
---video (Video)
---overlayed graphics (Sprites, MCs, Shapes)
--controls (Buttons)
Run Code Online (Sandbox Code Playgroud)
舞台大小是固定的,我想拍摄我的画布元素的所有内容的图像快照(相机输入视频和重叠图形,但不包括控件).当叠加的图形在舞台大小的范围内时,我能够使这个图像快照.我是这样做的:
var bmpd:BitmapData = new BitmapData(canvas.width, canvas.height);
bmpd.draw(canvas, new Matrix(1, 0, 0, 1, canvas.x, canvas.y));
Run Code Online (Sandbox Code Playgroud)
但是,当我在画布上的视频上绘制的图形超出舞台显示区域的界限时,这会给我带来不必要的结果.如何仅在舞台内可见区域的范围内限制图像快照?
谢谢
我过去所做的是使用 as3corelib ,它包含 JPG ( JPGEncoder.as ) 和 PNG ( PNGEncoder.as ) 图像文件的编码器类。这些类使得从显示对象创建图像文件变得非常轻松。
这是我的一个程序中的代码,它使用 FileReference 将整个舞台及其所有子级的 .png 保存到本地磁盘。
//Save Canvas Snapshot
private function saveCanvasSnapshot():void
{
var bitmapData:BitmapData = new BitmapData(DropSwatch.controller.stage.stageWidth, DropSwatch.controller.stage.stageHeight);
bitmapData.draw(DropSwatch.controller);
var file:ByteArray = PNGEncoder.encode(bitmapData);
var fileReference:FileReference = new FileReference();
fileReference.save(file, "DropSwatchCanvas.png");
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,由于您想要除控件之外的所有图层,因此您可以简单地在绘制 biamapData 时使控件图层不可见,然后让它们重新出现。然后使用 PNGEncoder(或 JPGEncoder)对 bitmapData 进行编码,将其分配给 ByteArray 并将 byteArray 保存为 .png(或 .jpg)