C# EDSDK EDSSETProperty数据故障
在VisualStudio中,我有一个程序,当前每次单击按钮都会拍摄5张照片。我希望程序拍摄这5张照片,然后更改光圈设置,最后拍摄1张照片。 没有真正相关的代码,因此这是为已经了解SDK的人编写的 我已经仔细研究过如何处理这个问题,但我对一般的编码还缺乏经验 谢谢 也许是有用的代码C# EDSDK EDSSETProperty数据故障,c#,edsdk,C#,Edsdk,在VisualStudio中,我有一个程序,当前每次单击按钮都会拍摄5张照片。我希望程序拍摄这5张照片,然后更改光圈设置,最后拍摄1张照片。 没有真正相关的代码,因此这是为已经了解SDK的人编写的 我已经仔细研究过如何处理这个问题,但我对一般的编码还缺乏经验 谢谢 也许是有用的代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; usi
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using EDSDKLib;
using CanonCameraAppLib;
using CanonCameraAppLib.Remote;
namespace CanonCameraApp
{
public partial class CanonCameraApp : Form
{
public delegate void TakePhotoDelegate(int delay);
private CameraAPI api;
private RemoteServer server;
private TakePhotoDelegate takePhotoDelegate;
public CanonCameraApp()
{
InitializeComponent();
api = CameraAPI.Instance;
takePhotoDelegate = new TakePhotoDelegate(takePhotograph);
init();
}
private void server_OnTakePhotoCommandEvent(RemoteCommandEventArgs e)
{
this.Invoke(takePhotoDelegate, e.Delay);
}
private void init()
{
loadCameras();
registerEvents();
if (Convert.ToBoolean(ConfigurationManager.AppSettings["StartServerOnStartup"]))
{
startServerListener();
}
}
private void registerEvents()
{
CameraAPI.OnCameraAdded += new CameraAddedEventHandler(api_OnCameraAdded);
}
private void api_OnCameraAdded(CameraAddedEventArgs e)
{
scanForCamerasToolStripMenuItem_Click(null, new EventArgs());
}
private void startServerListener()
{
server = new RemoteServer(Convert.ToInt32(ConfigurationManager.AppSettings["ListenPort"]));
server.OnTakePhotoCommandEvent += new TakePhoto(server_OnTakePhotoCommandEvent);
new Thread(server.Start).Start();
}
private void loadCameras()
{
try
{
cbCameras.DataSource = api.Cameras;
cbCameras.DisplayMember = "Name";
cbCameras.Enabled = true;
btnTakePhoto.Enabled = true;
btnProperties.Enabled = true;
scanForCamerasToolStripMenuItem.Enabled = false;
subscribeToEvents();
}
catch (CameraNotFoundException)
{
MessageBox.Show("No cameras were detected. Please make sure that they are plugged in and are turned on.");
cbCameras.Enabled = false;
btnTakePhoto.Enabled = false;
btnProperties.Enabled = false;
scanForCamerasToolStripMenuItem.Enabled = true;
}
}
private void subscribeToEvents()
{
List<Camera> cameras = getCameraList();
foreach (Camera camera in cameras)
{
camera.OnNewItemCreated += new CanonCameraAppLib.Events.NewItemCreatedEventHandler(camera_OnNewItemCreated);
}
}
void camera_OnNewItemCreated(Camera sender, CanonCameraAppLib.Events.NewItemCreatedEventArgs e)
{
if (chbPreview.Checked)
{
PhotoPreview preview = new PhotoPreview(e.Item, true);
preview.Show();
}
}
// private void changeAperature(int value)
//{
// Camera camera = getSelectedCamera();
// camera.changeAperture(value);
//}
private void takePhotograph(int delay)
{
Camera camera = getSelectedCamera();
camera.takePhotograph(delay);
}
private Camera getSelectedCamera()
{
return (Camera)cbCameras.SelectedItem;
}
private List<Camera> getCameraList()
{
List<Camera> cameras = new List<Camera>(cbCameras.Items.Count);
foreach (object camera in cbCameras.Items)
{
cameras.Add((Camera)camera);
}
return cameras;
}
#region Handled Form Events
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <=4; i++)
takePhotograph(Convert.ToInt16(textBox1.Text));
for (int i = 0; i <= 1; i++)
;
}
private void scanForCamerasToolStripMenuItem_Click(object sender, EventArgs e)
{
loadCameras();
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
quit();
}
private void CanonCameraApp_FormClosing(object sender, FormClosingEventArgs e)
{
quit();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
new About().ShowDialog(this);
}
/// <summary>
/// Opens the Camera Properties window
/// </summary>
private void btnProperties_Click(object sender, EventArgs e)
{
new CameraProperties(getSelectedCamera()).Show();
}
#endregion
private void quit()
{
if (server != null)
{
server.Stop();
}
Application.ExitThread();
Application.Exit();
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统配置;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用系统线程;
使用System.Windows.Forms;
使用EDSDKLib;
使用CanonCameraAppLib;
使用CanonCameraAppLib.Remote;
名称空间CameraApp
{
公共部分类CanonCameraApp:表单
{
公共代表无效的光电门(int延迟);
私人摄像机;
专用远程服务器;
专用光电门;
公共摄像机应用程序()
{
初始化组件();
api=CameraAPI.Instance;
takePhotoDelegate=新的takePhotoDelegate(takephoto);
init();
}
专用void服务器\u OnTakePhotoCommandEvent(RemoteCommandEventArgs e)
{
调用(takePhotoDelegate,即延迟);
}
私有void init()
{
加载摄影机();
registerEvents();
if(Convert.ToBoolean(ConfigurationManager.AppSettings[“StartServerOnStartup”]))
{
startServerListener();
}
}
私有无效注册表事件()
{
CameraAPI.OnCameraAdded+=新的CameraAddedEventHandler(api_OnCameraAdded);
}
专用void api_OnCameraAdded(CameraAddedEventArgs e)
{
scanForCamerasToolStripMenuItem_单击(空,新事件参数());
}
私有void startServerListener()
{
服务器=新的远程服务器(Convert.ToInt32(ConfigurationManager.AppSettings[“ListenPort”]);
server.OnTakePhotoCommandEvent+=新拍摄的照片(server\u OnTakePhotoCommandEvent);
新线程(server.Start).Start();
}
私用摄影机()
{
尝试
{
cbcamers.DataSource=api.camers;
cbcamers.DisplayMember=“Name”;
cbcamers.Enabled=true;
btntakphoto.Enabled=true;
btnProperties.Enabled=true;
scanForCamerasToolStripMenuItem.Enabled=false;
下标事件();
}
捕获(CameraNotFoundException)
{
MessageBox.Show(“未检测到任何摄像头。请确保它们已插入并已打开。”);
cbcamers.Enabled=false;
btntakphoto.Enabled=false;
btnProperties.Enabled=false;
scanForCamerasToolStripMenuItem.Enabled=true;
}
}
私有无效订阅事件()
{
列出摄影机=getCameraList();
foreach(摄影机中的摄影机)
{
camera.OnNewItemCreated+=新的CanonCameraAppLib.Events.NewItemCreatedEventHandler(camera\u OnNewItemCreated);
}
}
创建无效照相机(照相机发送器,CanonCameraAppLib.Events.NewItemCreatedEventArgs e)
{
如果(chbPreview.Checked)
{
照片预览=新的照片预览(如项目,真);
preview.Show();
}
}
//私有void changeAperature(int值)
//{
//摄像头=getSelectedCamera();
//照相机。更改光圈(值);
//}
私人照片(整数延迟)
{
摄像头=getSelectedCamera();
拍照(延迟);
}
私人摄像机getSelectedCamera()
{
返回(摄像头)cbCameras.SelectedItem;
}
私有列表getCameraList()
{
列表摄像机=新列表(cbcamers.Items.Count);
foreach(cbCameras.Items中的对象摄影机)
{
摄像头。添加((摄像头)摄像头);
}
返回摄像机;
}
#区域处理的表单事件
私有无效按钮1\u单击(对象发送者,事件参数e)
{
对于(int i=0;i)您正在使用的SDK是什么?当前它是如何拍摄照片的?请参阅上面的编辑。谢谢