2015-08-21 32 views
0

超过+0的矩形我使用FlashyWrappers视频编码器来记录摄像头会话,并且我想使用摄像机的copyToByteArray()方法来只抓取从图像的中心。似乎无法复制y使用Camera.copyToByteArray()

代码(在事件处理程序中)看起来是这样的:

// variables 
var frame :ByteArray = new ByteArray(); 
var rect :Rectangle = new Rectangle(100, 100, 200, 200); 

// grab frame 
camera.copyToByteArray(rect, frame); 

// encode frame 
encoder.addVideoFrame(frame); 

整个过程是合理的,而我得到的视频输出,但问题是,拍摄区域是在0锁定在ÿ ,所以是如果我通过了:

new Rectangle(100, 0, 200, 200); 

这使得该方法不能用于比全帧捕获任何其他(这是不是我想要的,因为我们正在做面部捕捉)。

编辑:我已经在这里添加了一个Gist,带有演示代码,您可以在其中拖动一个矩形来捕获该区域。它仍然是行不通的,其中的BitmapData.draw()的作用:

https://gist.github.com/davestewart/80d55538a615aa2eacaa

任何想法?

+1

很可能在框架中的错误,请联系作者。 – BotMaster

+0

我认为这是一个AS3的错误...框架只是吐出它给出的东西。谢谢 –

回答

0

我对@ BotMaster对此评论的看法...从来没有在rectangle之前出现过这样的问题。

由于frame包含一个像素值的字节数组为什么不使用Loader之前检查你有什么使用encoder.addVideoFrame(frame);?如果(从字节)快照图像看起来不错,但编码的版本看起来不对,那么你知道问题出在哪里?

尝试是这样的:

//# variables 
var frame  : ByteArray = new ByteArray(); 
var rect  : Rectangle = new Rectangle(100, 100, 200, 200); 
var img_loader : Loader = new Loader(); 

//# grab frame 
camera.copyToByteArray(rect, frame); 

//# check image before encode 
img_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgBytes_complete); 
img_loader.loadBytes(frame); 

function onImgBytes_complete (e:Event) 
{ 
    var test_BMP : Bitmap = new Bitmap(); 
    test_BMP = img_loader.content as Bitmap; 
    addChild(test_BMP); //or add to specific test container 
} 

//# encode frame 
//encoder.addVideoFrame(frame); 
+0

感谢代码@VC-One,不幸的是我无法让你的例子工作(它在loadBytes上失败了),但我已经添加了一个互动示例作为Gist,将您得到的结果与bitmapData.draw进行比较()(这是我预期的结果):https://gist.github.com/davestewart/80d55538a615aa2eacaa 试试看,并找回我! 谢谢。 –