c# - 如何为多个图片框应用相机新框架?
问题描述
我对视频应用了过滤器,我可以从 picfilter.Image 获取视图,但我想使用两个图片框,我希望其中一个(picoriginal.Image)可以显示原始视图,另一个可以显示过滤后的视图。我不能那样做。可能我应该使用“if”来执行此操作,并且我应该说当按下 btnapply 时将其设为灰色过滤,或者当按下 button1 时将其设为 sobel 过滤。我该怎么做?(我在不同的类中编写了过滤器。)
这是主程序的代码:
using AForge.Video.DirectShow;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace dnm1310img
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public FilterInfoCollection devices;
public VideoCaptureDevice camera;
private void Form1_Load(object sender, EventArgs e)
{
devices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo item in devices)
{
comboBox1.Items.Add(item.Name);
}
camera = new VideoCaptureDevice();
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (camera.IsRunning == false)
{
camera = new VideoCaptureDevice(devices[comboBox1.SelectedIndex].MonikerString);
camera.NewFrame += Camera_NewFrame;
camera.Start();
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message + "");
}
}
private void Camera_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
picoriginal.Image = image;
}
private void btnapply_Click(object sender, EventArgs e)
{
Bitmap image = new Bitmap(picoriginal.Image);
Bitmap gray = dnm1310img.Gray.GrayFilter(image);
picfilter.Image = gray;
}
private void button1_Click(object sender, EventArgs e)
{
if (picfilter.Image != null)
{
Bitmap image = new Bitmap(picfilter.Image);
Bitmap sbl = dnm1310img.Sobel.SobelFilter(image);
picfilter.Image = sbl;
}
else
{
Bitmap image = new Bitmap(picoriginal.Image);
Bitmap sbl = dnm1310img.Sobel.SobelFilter(image);
picfilter.Image = sbl;
}
}
private void GeriAL_Click(object sender, EventArgs e)
{
picfilter.Image=null;
}
}
}
这是应该改变的部分:
private void Camera_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
picoriginal.Image = image;
}
例如,当我编写此代码时,它正在工作,但是如何根据按下按钮来执行此操作?(例如,获取每个类的视图:picfilter.Image = dnm1310img.Sobel.SobelY(image);)
picfilter.Image = dnm1310img.Gray.GrayFilter(image);
解决方案
编辑:我解决了这个问题:
public void Camera_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
picoriginal.Image = image;
if(btnapplyWasClicked ==true)
{
Bitmap image2 = (Bitmap)eventArgs.Frame.Clone();
picfilter.Image = dnm1310img.Gray.GrayFilter(image2);
}
private bool btnapplyWasClicked = false;
private void btnapply_Click(object sender, EventArgs e)
{
btnapplyWasClicked = true;
Bitmap image = new Bitmap(picoriginal.Image);
Bitmap gray = dnm1310img.Gray.GrayFilter(image);
picfilter.Image = gray;
}
推荐阅读
- python - 使用 Python 的文件和目录
- javascript - 在 v-for 循环中单击时检索数据,然后遍历数据
- javascript - 如何更新/重置 formBuilder 属性值?
- nginx - 使用 OBS 和 nginx 改变 rtmp 流的延迟和抖动
- image - 以低质量下载图像
- javascript - 查找标签之间的特定值
- node.js - 无法修复 Cryptiles - 熵不足错误
- java - 用西班牙语为 StanfordNLP 配置 SUTime - Java
- vb.net - 无法在 VB 中使用 MySqlClient 从数据库中获取数据,并且公共异步变量无法访问
- php - 在 PHP OOP 中避免许多 DB GET 查询