加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

拍摄闪光灯中显示对象可见区域的快照

发布时间:2020-12-15 07:28:21 所属栏目:百科 来源:网络整理
导读:我在闪存(AS3)中有相机输入应用程序,我在上面绘制一些图形.我想拍摄舞台可见区域的图像快照,但只有视频是我在视频上绘制的图形.我想从图像快照中排除控件.我的显示对象布局如下: -stage --canvas (Sprite) ---video (Video) ---overlayed graphics (Sprites
我在闪存(AS3)中有相机输入应用程序,我在上面绘制一些图形.我想拍摄舞台可见区域的图像快照,但只有视频是我在视频上绘制的图形.我想从图像快照中排除控件.我的显示对象布局如下:

-stage
 --canvas (Sprite)
  ---video (Video)
  ---overlayed graphics (Sprites,MCs,Shapes)
 --controls (Buttons)

舞台大小是固定的,我想拍摄我的画布元素的所有内容的图像快照(相机输入视频和重叠图形,但不包括控件).当叠加的图形在舞台大小的范围内时,我能够使这个图像快照.我是这样做的:

var bmpd:BitmapData = new BitmapData(canvas.width,canvas.height);
bmpd.draw(canvas,new Matrix(1,1,canvas.x,canvas.y));

但是,当我在画布上的视频上绘制的图形超出舞台显示区域的界限时,这会给我带来不必要的结果.如何仅在舞台内可见区域的范围内限制图像快照?

谢谢

解决方法

我过去所做的就是使用 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");
    }

在你的情况下,因为除了控件之外你想要所有的图层,你可以简单地使控件图层在绘制biamapData时不可见,然后让它们重新出现.然后使用PNGEncoder(或JPGEncoder)对bitmapData进行编码,将其分配给ByteArray并将byteArray保存为.png(或.jpg)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读