调用DLL 文件进行从CCD 中取图像,但是开始摄像画面是黑的,不知道什么原因DllImport("HQDLAPI.dll")]
//初始化设备,返回摄像头句柄,用于其它函数的调用
public static extern IntPtr HqDLInitialize(ref string pFilterName, out int pIndex, ref CapInfoStruct pCapInfo, out IntPtr hCamera);
//实时设置视频参数
[DllImport("HQDLAPI.dll")]
public static extern IntPtr HqDLSetCapInfo(IntPtr hCamera, CapInfoStruct pCapInfo);
//设置图像参数
[DllImport("HQDLAPI.dll")]
public static extern IntPtr HqDLSetParam(IntPtr hCamera, int DLParam, bool Value);
public struct CapInfoStruct
{
public byte[] Buffer;
public Int32 Heigth;
public Int32 Width;
public Int32 OffsetX;
public Int32 OffsetY;
public Int32 Exposure;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public sbyte[] Gain;
public sbyte Control;
public sbyte InternalUse;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public sbyte[] ColorOff;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public sbyte[] Reserved;
} public enum DLPARAM
{
BWSHOW = 0, // 是否黑白显示
RAWDATASHOW, // 是否直接显示原始数据
CLEARVIEW, // 是否利用优化算法进行转换
UPDOWN, // 上下翻转
};
public long m_hDevice;
public const int ResSuccess = 0; public const int WS_OVERLAPPED = 0x0; public const int WS_CHILD = 0x40000000; public const int WS_VISIBLE = 0x10000000; public const int WS_MYSTYLE = WS_CHILD | WS_VISIBLE;
// 开始调用
CapInfoStruct cap = new CapInfoStruct(); DLVIDEORECT dlv = new DLVIDEORECT();
byte[] buff;
buff = new byte[500000];
cap.Buffer = buff;
cap.Heigth = 1024;
cap.Width = 768;
cap.Exposure = 50;
cap.OffsetX = 0;
cap.OffsetY = 0;
cap.InternalUse = 0;
sbyte[] str = new sbyte[3];
str[0] = 26;
str[1] = 24;
str[2] = 34;
cap.Gain = str;
cap.Control = 0;
string stg = "DLC";
int nIndex;
IntPtr camera;
HqDLInitialize(ref stg, out nIndex, ref cap, out camera);
HqDLSetParam(camera,(int) DLPARAM.CLEARVIEW, false);
HqDLSetParam(camera, (int)DLPARAM.BWSHOW, false);
HqDLSetParam(camera, (int)DLPARAM.UPDOWN, false);
HqDLSetParam(camera, (int)DLPARAM.BWSHOW, false); HqDLSetCapInfo(camera, cap);
HqDLStartView(camera, stg, WS_MYSTYLE, 0, 0, 320, 320, pictureBox1.Handle, 0);
不知道怎么回事就是PictureBox1上的画面是黑色的
//初始化设备,返回摄像头句柄,用于其它函数的调用
public static extern IntPtr HqDLInitialize(ref string pFilterName, out int pIndex, ref CapInfoStruct pCapInfo, out IntPtr hCamera);
//实时设置视频参数
[DllImport("HQDLAPI.dll")]
public static extern IntPtr HqDLSetCapInfo(IntPtr hCamera, CapInfoStruct pCapInfo);
//设置图像参数
[DllImport("HQDLAPI.dll")]
public static extern IntPtr HqDLSetParam(IntPtr hCamera, int DLParam, bool Value);
public struct CapInfoStruct
{
public byte[] Buffer;
public Int32 Heigth;
public Int32 Width;
public Int32 OffsetX;
public Int32 OffsetY;
public Int32 Exposure;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public sbyte[] Gain;
public sbyte Control;
public sbyte InternalUse;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public sbyte[] ColorOff;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public sbyte[] Reserved;
} public enum DLPARAM
{
BWSHOW = 0, // 是否黑白显示
RAWDATASHOW, // 是否直接显示原始数据
CLEARVIEW, // 是否利用优化算法进行转换
UPDOWN, // 上下翻转
};
public long m_hDevice;
public const int ResSuccess = 0; public const int WS_OVERLAPPED = 0x0; public const int WS_CHILD = 0x40000000; public const int WS_VISIBLE = 0x10000000; public const int WS_MYSTYLE = WS_CHILD | WS_VISIBLE;
// 开始调用
CapInfoStruct cap = new CapInfoStruct(); DLVIDEORECT dlv = new DLVIDEORECT();
byte[] buff;
buff = new byte[500000];
cap.Buffer = buff;
cap.Heigth = 1024;
cap.Width = 768;
cap.Exposure = 50;
cap.OffsetX = 0;
cap.OffsetY = 0;
cap.InternalUse = 0;
sbyte[] str = new sbyte[3];
str[0] = 26;
str[1] = 24;
str[2] = 34;
cap.Gain = str;
cap.Control = 0;
string stg = "DLC";
int nIndex;
IntPtr camera;
HqDLInitialize(ref stg, out nIndex, ref cap, out camera);
HqDLSetParam(camera,(int) DLPARAM.CLEARVIEW, false);
HqDLSetParam(camera, (int)DLPARAM.BWSHOW, false);
HqDLSetParam(camera, (int)DLPARAM.UPDOWN, false);
HqDLSetParam(camera, (int)DLPARAM.BWSHOW, false); HqDLSetCapInfo(camera, cap);
HqDLStartView(camera, stg, WS_MYSTYLE, 0, 0, 320, 320, pictureBox1.Handle, 0);
不知道怎么回事就是PictureBox1上的画面是黑色的
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货