bridge.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package dh_takephoto
  2. /*
  3. #include "takephoto.h"
  4. */
  5. import "C"
  6. import (
  7. "fmt"
  8. "unsafe"
  9. )
  10. // 图像类型
  11. const (
  12. IMG_TYPE_BMP = 1 // 拍照输出"bmp"图像
  13. IMG_TYPE_JPG = 2 // 拍照输出"jpg"图像
  14. )
  15. // 图像水印
  16. type SImgMark struct {
  17. CamModelName string // 相机型号名
  18. CamSerialNum string // 相机序列号
  19. ImgExposureTime float64 // 曝光时间值
  20. }
  21. // 获取系统当前USBFS内存大小(MB), 成功返回: >=0, 失败返回: <0值
  22. func getSysUsbfsMemCurrentSize() int {
  23. ret := int(C.DH_GetSysUsbfsMemCurrentSize())
  24. return ret
  25. }
  26. // 设置系统新的USBFS内存大小(MB), 成功返回: 0值, 失败返回: <0值
  27. func setSysUsbfsMemSize(val int) int {
  28. setNewV := C.int(val)
  29. ret := int(C.DH_SetSysUsbfsMemSize(setNewV))
  30. return ret
  31. }
  32. // 获取当前已连接的大华相机的数量, 成功返回: >=0, 失败返回: <0值
  33. func GetDHCameraCount() int {
  34. ret := int(C.DH_GetCameraCount())
  35. return ret
  36. }
  37. // 单次拍照时, 如果相机处于自动曝光模式, 是否等待曝光稳定后再拍照
  38. // 参数: waitAE: 0=不等待, 1=等待(默认)
  39. func SetWaitAEDoneForTakePhoto(waitAE int) int {
  40. ret := int(C.DH_SetWaitAEDoneForTakePhoto(C.int(waitAE)))
  41. return ret
  42. }
  43. // 单次执行相机拍照, 并保存到文件, 成功返回: 本次拍照图像的水印信息, 失败返回: 错误原因和空的水印信息
  44. // 参数说明:
  45. // "imgType" - 图像保存类型: 1-".bmp", 2-".jpg"
  46. // "saveImgPath" - 保存的文件名: 根据所选保存图像的类型, 程序会自动校检和处理文件的扩展名(智能)
  47. // "timeout" - 等待超时时间, 单位:秒: < 0 表示无超时; 无论超时怎么设置, 首次尝试拍照一定会
  48. // 执行, 但时间不确定; 拍照成功、超时(相机持续无数据的时间)或发生错误时会自动结束任务.
  49. func TakePhoto(imgType int, saveImgPath string, timeout int) (SImgMark, error) {
  50. if (imgType != IMG_TYPE_BMP && imgType != IMG_TYPE_JPG) || len(saveImgPath) == 0 {
  51. return SImgMark{}, fmt.Errorf("invalid arguments")
  52. }
  53. path := C.CString(saveImgPath)
  54. defer C.free(unsafe.Pointer(path))
  55. var imgMark C.DHImgMark
  56. ret := int(C.DH_TakePhoto(C.DHImgType(imgType), path, C.int(timeout), &imgMark))
  57. if ret != 0 {
  58. return SImgMark{}, fmt.Errorf("an error occurred while calling the C.DH_TakePhoto() function(%d)", ret)
  59. }
  60. return SImgMark{
  61. CamModelName: C.GoString((*C.char)(unsafe.Pointer(&imgMark.camModelName[0]))),
  62. CamSerialNum: C.GoString((*C.char)(unsafe.Pointer(&imgMark.camSerialNum[0]))),
  63. ImgExposureTime: float64(imgMark.imgExposureTime),
  64. }, nil
  65. }