我正在开展一个项目,我必须制作一个注释视频播放器!
基本上,我遵循了本教程[1],其中作者介绍了如何使用Flex在自己的网络摄像头上绘制(在这种情况下只是一个矩形)。
一切都很顺利,但现在我想添加一个监听器来获取图像的快照(我绘制的内容+网络摄像头图像),然后将其保存在我的计算机上。
我已经创建了监听器,但问题是这个监听器只保存了没有我绘图的网络摄像头的图像(即使我将该绘图添加到摄像头)。
private function save():void {
var bitmapData:BitmapData = new BitmapData(videoDisplay.width,videoDisplay.height);
bitmapData.draw(videoDisplay);
var ba:ByteArray = (new PNGEncoder()).encode(bitmapData);
(new FileReference()).save(ba, "doodle.png");
}
我根本没有使用Flex / Flash的经验,所以也许我做错了。
你能帮帮我吗?
[1] http://narinderkumar.wordpress.com/2012/02/16/drawing-on-live-video-in-flex/
答案 0 :(得分:0)
这个例子工作正常 - 我没有看到你的代码片段中的问题,但也许你只是在视频上绘制可见图形,在那种情况下图形层在相机后面...希望帽子有帮助;)
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.media.Camera;
import flash.media.Video;
public class cameratest extends Sprite
{
private var holder:Sprite;
private var layover:Sprite;
private var display:Sprite;
public function cameratest()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var cam:Camera = Camera.getCamera();
var video:Video =new Video(cam.width, cam.height);
video.attachCamera(cam);
//holder hollds the video and on top the layover to draw on
holder = new Sprite();
stage.addChild(holder);
holder.addChild(video);
//layover to draw on
layover = new Sprite();
holder.addChild(layover);
//will show the snapshot
display = new Sprite();
display.x= 350;
stage.addChild(display);
//listener for onclick do snapshot
stage.addEventListener(MouseEvent.CLICK, drawAndSave);
}
private function drawAndSave(E:Event=null):void{
layover.graphics.beginFill(0xff0000,1);
layover.graphics.drawCircle(10,10,10);
var bmd:BitmapData=new BitmapData(holder.width,holder.height);
bmd.draw(holder);
var bmp:Bitmap = new Bitmap(bmd,'auto',true);
display.addChild(bmp);
}
}
}