C# 封装SDK 获取摄像头的水平角度和垂直角度

最近需要做一个C#版本的控制终端,控制摄像头,获取摄像头的水平角度和垂直角度

获取当前摄像头的角度,需要调用一个名为NET_DVR_GetDVRConfig的bool类型的函数

在C++中,函数定义:NET_DVR_GetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpOutBuffer, DWORD dwOutBufferSize, LPDWORD lpBytesReturned)

在C#封装过程中,函数改为:

[DllImport(@"HCNetSDK.dll")]
public static extern bool NET_DVR_GetDVRConfig(int lUserID, uint dwCommand, int lChannel, IntPtr lpOutBuffer, uint dwOutBufferSize, ref uint lpBytesReturned);

在调用的过程中,主要是第四个参数的转换遇到了问题

首先看一下C++Demo里面的函数用法:

 1  NET_DVR_PTZPOS m_ptzPos = {0};
 2     DWORD dwReturned;
 3     BOOL bRet = NET_DVR_GetDVRConfig(m_lUserID[m_struSlaveCameraCond.byID], NET_DVR_GET_PTZPOS, 0, &m_ptzPos, sizeof(NET_DVR_PTZPOS), &dwReturned);
 4     if (!bRet)
 5     {
 6         g_pMainDlg->AddLog(m_iDeviceIndex, OPERATION_FAIL_T, "NET_DVR_GET_PTZPOS");
 7         return;
 8     }
 9
10     int m_iPara1 = HexToDecMa(m_ptzPos.wPanPos);
11     int m_iPara2 = HexToDecMa(m_ptzPos.wTiltPos);
12     int m_iPara3 = HexToDecMa(m_ptzPos.wZoomPos);

C++获取角度

首先结构体实例化 ,传入对应的参数,返回bool类型的值,值为True时,获取结构体里面的值

在c#中,传递的第四个参数的类型由LPVOID 类型的转化为了IntPtr类型的

首先两篇文档:Marshal.StructureToPtr方法Marshal.PtrToStructure方法

了解了Intptr与架构体之间的相互转化,就好处理了,代码如下:

1   //首先获取当前结构体的长度
2             int nSizeOfPtz = Marshal.SizeOf(Ptz);
3             //定义一个IntPtr类型的数据
4             IntPtr intPtr = Marshal.AllocHGlobal(nSizeOfPtz);
5             DevideAngle = CHCNetSDK.NET_DVR_GetDVRConfig(_mLUserId, CHCNetSDK.NET_DVR_GET_PTZPOS, 0, intPtr, (uint)nSizeOfPtz, ref dwReturned);
6             //IntPtr数据转换成Struct结构体
7             Ptz = (CHCNetSDK.NET_DVR_PTZPOS)Marshal.PtrToStructure(intPtr, typeof(CHCNetSDK.NET_DVR_PTZPOS));
8             Pan = HexToDecMa(Ptz.wPanPos);
9             Tit = HexToDecMa(Ptz.wTiltPos);

C#获取角度

时间: 2024-11-10 11:52:40

C# 封装SDK 获取摄像头的水平角度和垂直角度的相关文章

UIWebView中javascript与Objective-C交互、获取摄像头

UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Excel (.xls) Keynote (.key.zip) Numbers (.numbers.zip) Pages (.pages.zip) PDF (.pdf) Powerpoint (.ppt) Word (.doc) Rich Text Format (.rtf) Rich Text For

OpenCV获取摄像头视频并在MFC的Picture控件上显示

分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/04/2535190.html http://blog.sina.com.cn/s/blog_6dbe9bdb0100nii7.html http://blog.csdn.net/augusdi/article/details/8762961 #include "stdafx.h" #in

onvif获取摄像头的流媒体地址完整流程

linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程 整体流程: Probe: 发现网络摄像头,获取webserver地址 http://192.168.15.240/onvif/device_service GetCapabilities:获取设备能力文件,从中识别出媒体信息地址URI:  http://192.168.15.240/onvif/Media GetProfiles: 获取媒体信息文件,识别主通道.子通道的视频编码分辨率 GetStreamUri:获取指定通道的流

Android -- 获取摄像头帧数据解码

由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Parameters p = mCamera.getParameters(); p.setPreviewFormat(ImageFormat.NV21); /*这是唯一值,也可以不设置.有些同学可能设置成 PixelFormat 下面的一个值,其实是不对的,具体的可以看官方文档*/ mCamera.setPa

opencv+qt+beaglebone 之获取摄像头数据。

最近在研究opencv. 把opencv获取摄像头数据调试成功. 一个简单的测试代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #include <QGridLayout> #include <QPushButton> #include <QComboBox> #include <QImage

用百度SDK获取地理位置和天气信息

下面实现通过百度SDK获取地理位置和天气信息,请参考百度开发文档 1. 在相关下载最新的库文件.将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中,建议全部放入, 程序兼容性会大大提升,将locSDK_5.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了. 2. 设置AndroidManifest.xml 在application标签中声明service组件,每个app拥有自己单独的定位service <service

平台树型部件获取或设置水平/垂直网格线

获取或设置水平网格线:获取或设置是否显示树型部件的水平网格线,true表示显示网格线,false表示不显示网格线. 获取或设置垂直网格线:获取或设置是否显示树型部件的垂直网格线,true表示显示网格线,false表示不显示网格线. 实例应用:在窗体功能管理中新增一个"显示水平/垂直网格线"功能."隐藏水平/垂直网格线"功能,通过平台智能向导添加代码如下: 显示水平/垂直网格线: 隐藏水平/垂直网格线: 运行效果: 点击"显示水平/垂直网格线"功能

Android 关于获取摄像头帧数据解码

// 创建保存照片文件夹 private void CreateFileJPG() { File file = new File("/sdcard/image"); if (!file.exists()) { try { file.mkdirs(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } /** * 拍照保存图片 * */ public void saveMyBitmap

高德SDK获取到的坐标转换为GPS真实坐标方法,Java版

发现高德SDK不提供高德的左边转GPS坐标(GCJ_02转WGS_84),下面是一份Java版的 /**************************** 文件名:GCJ2WGS.java 创建时间: 所在包:com 作者: 说明:该类的delta方法可以将高德地图SDK获取到的GPS经纬度转换为真实的经纬度. ****************************/ package com; import java.util.HashMap; public class GCJ2WGS {