2015-08-21 50 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 試試看,並找回我! 謝謝。 –