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:38InitializeComponentсрабатывает событиеCameraSelectDevices_SelectedIndexChanged. Просто переставьте созданиеControllerвыше. – Alexander Petrov Aug 16 '18 at 17:49