0

ユーザーが複数のビデオ (ファイル) を同時に選択できるシンプルな Winforms アプリがあり、バックグラウンド ワーカー スレッドを実行して BW 内の各ビデオをループします。以下のコードを貼り付けると、この行で「...からキャプチャを作成できません」としてNullReferenceExceptionが発生します

Capture _capture = new Capture(videoFileName) 

in processVideo メソッド。

注意:単一のビデオを選択すると、同じコードで問題なく動作します。そのため、Capture クラスの複数のインスタンスに問題があります。

ProcessVideo メソッドには Capture の新しいインスタンスがあり、それを個別に開くことが期待されます。私が間違っているかもしれないことについてのアイデアはありますか?

    private void openVideoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "Video | *.AVI;*.MPEG;*.WMV;*.MP4;*.MOV;*.MPG;*.MPEG;*.MTS;*.FLV";
                ofd.Multiselect = true;
                if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    string[] videos = ofd.FileNames;
                    if (videos != null)
                    {

                        BackgroundWorker[] bw = new BackgroundWorker[videos.GetLength(0)];
                        int n = 0;
                        foreach (string video in videos)
                        {
                            bw[n] = new BackgroundWorker();
                            bw[n].DoWork += new DoWorkEventHandler(bw_DoWork);
                            bw[n++].RunWorkerAsync(video);
                        }
                    }
                }
            }
            catch (NullReferenceException excpt)
            {
                MessageBox.Show(excpt.Message);
            }

        }


        void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            string filename = (string)e.Argument;
            ProcessVideo(filename);
        }


       private void ProcessVideo(string videoFileName)
        {

            Capture _capture = new Capture(videoFileName);
             UInt64 TOTAL_FRAMES = Convert.ToUInt64(_capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT));
                for (UInt64 n = 0; n < TOTAL_FRAMES; n++)
                {
                    using (Image<Bgr, Byte> img1 = _capture.QueryFrame())
                    {

//do something with the frame

                }
        }

}
4

1 に答える 1

0

Sourcesafe サービス パックを更新することをお勧めします。

[あなたのコードは完璧だと思います。そこには何も問題はありません。

オブジェクトの作成中にエラーが発生しました。ファイル形式がサポートされていないか、内部エラーの問題である可能性があることが明らかにわかりました。]

更新を行った後、機能するかどうかをお知らせください。

よろしくレッド

于 2012-04-17T08:17:42.367 に答える