0

ビデオを録画しながら写真をサンプリングするアプリを作成しています。

x回ごとにフレームを取得するためにサブスクライブできるイベントはありますか?

AndroidにはメソッドOnPreviewCallback(またはこのようなもの)があります

4

2 に答える 2

4

PhotoCamera クラスを使用する必要があります

PhotoCamera クラスには、さらに操作するためにプレビュー フレームをバイト配列に取得するメソッド GetPreviewBufferArgb32 が含まれています。

したがって、たとえば 1 秒あたり 5 フレームの場合は、タイマーを作成する必要があり、タイマーの刻みでメソッドを呼び出す必要があります。

これらのリンクを参照してください。これらは大いに役立ちます

http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202956(v=vs.105).aspx

http://msdn.microsoft.com/en-us/magazine/hh708750.aspx

http://msdn.microsoft.com/en-US/library/windowsphone/develop/microsoft.devices.photocamera(v=vs.105).aspx

于 2013-12-13T14:22:06.353 に答える
0

私のプロジェクトの1つに以下のコードを使用しました(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

                            }
                        }
                    }
                }
            }
于 2013-12-13T14:43:26.787 に答える