0
using DarrenLee.Media;
using System.Drawing;
using System.Windows.Forms;

namespace CameraApplication.Data
{
    public class CameraController
    {
        private static string filename;
        private static Camera camera;
        private static PictureBox cameraPreview;
        private static ComboBox cameraSelectDevice;
        private static ComboBox cameraSelectResolution;

        public CameraController(string path, string name, PictureBox preview, ComboBox selectDevice, ComboBox selectResolution)
        {
            camera = new Camera();
            filename = path + name;
            cameraPreview = preview;
            cameraSelectDevice = selectDevice;
            cameraSelectResolution = selectResolution;
            GetInfoCamera();
            camera.OnFrameArrived += Camera_OnFrameArrived;
        }

        private void GetInfoCamera()
        {
            var cameraDevices = camera.GetCameraSources();
            var cameraResolutions = camera.GetSupportedResolutions();

            foreach (var d in cameraDevices) cameraSelectDevice.Items.Add(d);
            foreach (var r in cameraResolutions) cameraSelectResolution.Items.Add(r);

            cameraSelectDevice.SelectedIndex = 0;
            cameraSelectResolution.SelectedIndex = 0;
        }

        private void Camera_OnFrameArrived(object source, FrameArrivedEventArgs e)
        {
            Image image = e.GetFrame();
            cameraPreview.Image = image;
        }

        public void SelectDevice()
        {
            camera.ChangeCamera(cameraSelectDevice.SelectedIndex);
        }

        public void SelectResolution()
        {
            camera.Start(cameraSelectResolution.SelectedIndex);
        }

        public void Stop()
        {
            camera.Stop();
        }

        public void Save()
        {
            try
            {
                camera.Capture(filename);
                MessageBox.Show("Фотография сохранена!");
            }
            catch
            {
                MessageBox.Show("Фотография не сохранена!");
            }
        }
    }
}

Класс предназначенный для работы с веб-камерой.

using CameraApplication.Data;
using System;
using System.Windows.Forms;

namespace CameraApplication
{
    public partial class Main : Form
    {
        public string path;
        public CameraController Controller;

        public Main()
        {
            InitializeComponent();
            Controller = new CameraController(path, name.ToString(), CameraObject, CameraSelectDevices, CameraSelectResolutions);
        }

        private void CameraSelectDevices_SelectedIndexChanged(object sender, EventArgs e)
        {
            Controller.SelectDevice();
        }

        private void CameraSelectResolutions_SelectedIndexChanged(object sender, EventArgs e)
        {
            Controller.SelectResolution();
        }

        private void Main_FormClosed(object sender, FormClosedEventArgs e)
        {
            Controller.Stop();
        }

        private void Save_Click(object sender, EventArgs e)
        {
            Controller.Save();
        }
    }
}

Форма, где вызывается класс.

При компиляции выскакивает ошибка на строке Controller.SelectDevice(); Сама ошибка: "Object reference not set to an instance of an object." Controller было null Я в принципе понимаю, что объект является нулевым, но почему он нулевой, если я создал его, я понять не могу. Пробовал без static такая же ошибка. Помогите решить проблему.

  • Код создания формы покажите. Мне кажется у вас дефолтный конструктор Main просто не вызывается. Добавьте там лог. – Suvitruf - Andrei Apanasik Aug 16 '18 at 16:38
  • 1
    А можно оставить только те части кода, которые вызывают ошибку? – Monomax Aug 16 '18 at 16:59
  • Ошибка вызывается в классе Main – Arthur Aprellskiy Aug 16 '18 at 17:39
  • Вероятно, при выполнении метода InitializeComponent срабатывает событие CameraSelectDevices_SelectedIndexChanged. Просто переставьте создание Controller выше. – Alexander Petrov Aug 16 '18 at 17:49

0 Answers0