| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Author: NiuJiuRu
- // Email: niujiuru@qq.com
- package mvs_u_takephoto
- /*
- #include "takephoto.h"
- */
- import "C"
- import (
- "fmt"
- "unsafe"
- )
- // 图像类型
- const (
- IMG_TYPE_BMP = 1 // 拍照输出"bmp"图像
- IMG_TYPE_JPG = 2 // 拍照输出"jpg"图像
- )
- // 图像水印
- type SImgMark struct {
- CamModelName string // 相机型号名
- CamSerialNum string // 相机序列号
- ImgExposureTime float32 // 曝光时间值
- }
- // 获取系统当前USBFS内存大小(MB), 成功返回: >=0, 失败返回: -1值
- func getSysUsbfsMemCurrentSize() int {
- ret := int(C.GetSysUsbfsMemCurrentSize())
- return ret
- }
- // 设置系统新的USBFS内存大小(MB), 成功返回: 0值, 失败返回: -1值
- func setSysUsbfsMemSize(val int) int {
- setNewV := C.int(val)
- ret := int(C.SetSysUsbfsMemSize(setNewV))
- return ret
- }
- // 获取当前连接在USB口上的相机数, 失败返回: <0值, 成功返回: >=0
- func GetUsbCameraCount() int {
- ret := int(C.GetUsbCameraCount())
- return ret
- }
- // 单次执行相机拍照, 并保存到文件, 成功返回: 本次拍照图像的水印信息, 失败返回: 错误原因和空的水印信息
- // 参数说明:
- // "imgType" - 图像保存类型: 1-".bmp", 2-".jpg"
- // "saveImgPath" - 保存的文件名: 根据所选保存图像的类型, 程序会自动校检和处理文件的扩展名(智能)
- // "timeout" - 等待超时时间, 单位:秒: < 0 表示无超时; 无论超时怎么设置, 首次尝试拍照一定会
- // 执行, 但时间不确定; 拍照成功、超时(相机持续无数据的时间)或发生错误时会自动结束任务.
- func TakePhoto(imgType int, saveImgPath string, timeout int) (SImgMark, error) {
- if (imgType != IMG_TYPE_BMP && imgType != IMG_TYPE_JPG) || len(saveImgPath) == 0 {
- return SImgMark{}, fmt.Errorf("invalid arguments")
- }
- path := C.CString(saveImgPath)
- defer C.free(unsafe.Pointer(path))
- var imgMark C.SImgMark
- ret := int(C.TakePhoto(C.EImgType(imgType), path, C.int(timeout), &imgMark))
- if ret != 0 {
- return SImgMark{}, fmt.Errorf("an error occurred while calling the C.TakePhoto() function(%d)", ret)
- }
- return SImgMark{
- CamModelName: C.GoString((*C.char)(unsafe.Pointer(&imgMark.camModelName[0]))),
- CamSerialNum: C.GoString((*C.char)(unsafe.Pointer(&imgMark.camSerialNum[0]))),
- ImgExposureTime: float32(imgMark.imgExposureTime),
- }, nil
- }
|