我正在创建一个应用程序,可在录制视频时对照片进行采样。
是否有任何我可以订阅的活动,每x次获得一个帧?
在android中有一个方法OnPreviewCallback
(或类似的东西)
答案 0 :(得分:4)
您必须使用PhotoCamera类
PhotoCamera类包含一个方法GetPreviewBufferArgb32,用于将预览帧转换为字节数组,以便进行更深入的操作。
所以,对于每秒5帧,你需要制作一个计时器,并且在计时器上打勾,你必须调用该方法。
参考这些链接,这些可以帮到你很多
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202956(v=vs.105).aspx
答案 1 :(得分:0)
我将以下代码用于我的一个项目(QrCode扫描)
private static readonly ManualResetEvent _pauseFramesEvent = new ManualResetEvent(true);
private PhotoCamera _cam;
private Thread _yFramesThread;
private Dictionary<object, object> _hintDictionary;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
this._cam = new PhotoCamera();
this._cam.Initialized += _cam_Initialized;
this._pumpYFrames = true;
this._isScanning = true;
}
CreateStandByTimer();
this._yFramesThread = new Thread((PumpYFrames));
this._yFramesThread.Start();
base.OnNavigatedTo(e);
}
private void PumpYFrames()
{
var array = new byte[307200];
while (_pumpYFrames)
{
_pauseFramesEvent.WaitOne();
if (this._isScanning)
{
bool flag;
try
{
this._cam.GetPreviewBufferY(array);
flag = true;
}
catch
{
flag = false;
}
if (flag)
{
var source = new RGBLuminanceSource(array, 640, 480, false);
var binarizer = new HybridBinarizer(source);
var image = new BinaryBitmap(binarizer);
Reader reader = new QRCodeReader();
try
{
var results = reader.decode(image, _hintDictionary);
ProcessScan(results);
}
catch (Exception ex)
{//catch logic
}
}
}
}
}