C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#でWebカメラを表示メモリ不足


(過去ログ 177 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■101743 / inTopicNo.1)  C#でWebカメラを表示メモリ不足
  
□投稿者/ MASA (1回)-(2023/04/12(Wed) 15:55:53)

分類:[.NET 全般] 

C# Windows フォームアプリケーション .NET Framework

お願いします

今サンワサプライのwebカメラCMS-V54BKをパソコンに繋いでいるのですが
PCに入っているアプリのカメラでは動いていました

C#でコードを作りpictureboxに表示させてみるとメモリ不足と出まして
調べてみるとPCのアプリの時は100MBなのに対して
c#で表示させるとメモリが4GBを超えてエラーになってしまいます
色々調べたのですがわかりませんので
何か原因が分かられる方おられましたら
宜しくお願い致します


using System;
using System.Drawing;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;

namespace WebcamTest
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection VideoCaptureDevices;
        private VideoCaptureDevice FinalVideo;

        public Form1()
        {
            InitializeComponent();
            VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
            {
                comboBox1.Items.Add(VideoCaptureDevice.Name);
            }
            comboBox1.SelectedIndex = 0;
        }
        private void button1_Click_1(object sender, EventArgs e)
        {

            FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
            FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
            FinalVideo.Start();
        }
        private void button2_Click_1(object sender, EventArgs e)
        {
            FinalVideo.SignalToStop();
            FinalVideo.WaitForStop();
        }
        private void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap video = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = video;
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}




引用返信 編集キー/
■101744 / inTopicNo.2)  Re[1]: C#でWebカメラを表示メモリ不足
□投稿者/ WebSurfer (2664回)-(2023/04/12(Wed) 16:46:16)
No101743 (MASA さん) に返信

Bitmap など、使い終わったら Dispose すべきものが Dispose されてなくてメモリを
圧迫しているとかいうことはありませんか?
引用返信 編集キー/
■101745 / inTopicNo.3)  Re[1]: C#でWebカメラを表示メモリ不足
□投稿者/ 魔界の仮面弁士 (3617回)-(2023/04/12(Wed) 16:56:30)
No101743 (MASA さん) に返信
> private void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
> {
>  Bitmap video = (Bitmap)eventArgs.Frame.Clone();
Clone すべきなのは AForge の仕様なので良いとして:

>  pictureBox1.Image = video;
新しい画像をセットする際に、
以前にセットされていた画像を Dispose し忘れていませんか?
 pictureBox1.Image?.Dispose();
 pictureBox1.Image = video;


あと、NewFrame が UI スレッドという保証はなかったと思うので、
InvokeRequired 判定して、適宜 Invoke 呼び出しに切り替える必要があったような。
https://dobon.net/vb/melma/dotnet25.txt
引用返信 編集キー/
■101746 / inTopicNo.4)  Re[2]: C#でWebカメラを表示メモリ不足
□投稿者/ MASA (2回)-(2023/04/12(Wed) 19:27:11)
■WebSurferさん、魔界の仮面弁士さんありがとうございました

pictureBox1.Image?.Dispose(); 付けたらいけました

平均70MBになりました
ありがとうございます

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -