1. 配置yml文件
在yml文件中配置保存文件的地址
# 海康配置
hksetting:
image:
# 抓取图片上传路径
dvrPicSavePath: F://ideaworkspace/hk-project/dvr-pic
2. 抓图实现方式
- 创建图片结构体:HCNetSDK.NET_DVR_JPEGPARA
结构体信息:
//图片质量
public static class NET_DVR_JPEGPARA extends Structure {
/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图,
当分辨率为3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p
仅支持当前分辨率的抓图*/
public short wPicSize; /* 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA*/
public short wPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */
}
- 创建文件名称
- 调用抓图方法: NET_DVR_CaptureJPEGPicture
/**
* 设备抓图(无预览)
* 单帧设备抓取保存的图片为JPG,具体注意问题需要详细查看【设备网络sdk使用手册】
* @param lUserID: 登录设备的id
* @param lChannel: 设备通道
* @param lPicSize: 图片大小
* @param lPicQuality: 图片质量
* @param sPicbuf: 图片保存路径
* @return
*/
public String captureJPEGPicture(int lUserID, int lChannel, int lPicSize, int lPicQuality, String sPicbuf)
{
NativeLong nlUserID = new NativeLong(lUserID);
NativeLong nChannel = new NativeLong(lChannel);
HCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new HCNetSDK.NET_DVR_JPEGPARA();
lpJpegPara.wPicSize = (short)lPicSize;
lpJpegPara.wPicQuality = (short)lPicQuality;
// 参数必须写入到结构体,否则在保存图片的时候异常图片
lpJpegPara.write();
// 创建文件名称
String datePath = sPicbuf+"/"+DateUtils.dateTime();
// 判断文件夹是否创建
File file = new File(datePath);
if (!file.exists()){
file.mkdirs();
}
// 文件名称
String imageName = DateUtils.fullDateTime()+".jpg";
// 全路径
String path = datePath+"/"+imageName;
// 开始抓图
if (!hCNetSDK.NET_DVR_CaptureJPEGPicture(nlUserID, nChannel, lpJpegPara, path))
{
return "{失败编码:"+hCNetSDK.NET_DVR_GetLastError()+"}";
}else {
return "抓图成功!";
}
}
3. 接口层实现
@RestController
public class DeviceController {
@Value("${hksetting.image.dvrPicSavePath}")
private String dvrPicSavePath;
HIKDevice hikDevice;
// 初始化设备调用实现类
DeviceController() {
if (hikDevice == null) {
hikDevice = new HIKDevice();
}
}
@ApiOperation(value = "设备抓图", notes = "设备抓图")
@GetMapping(value = "/driverDVRPic")
@ResponseBody
public Object driverDVRPic(@RequestBody JSONObject json){
int lUserID = Integer.parseInt(json.get("lUserID").toString());
int lChannel = Integer.parseInt(json.get("lChannel").toString());
int lPicSize = Integer.parseInt(json.get("lPicSize").toString());
int lPicQuality = Integer.parseInt(json.get("lPicQuality").toString());
System.out.println(dvrPicSavePath);
String msg = hikDevice.captureJPEGPicture(lUserID, lChannel, lPicSize, lPicQuality, dvrPicSavePath);
return ResponseUtil.ok(msg);
}
}
4. 通过Postman调用测试
- 获取设备登录id与设备通道
注册登录的实现参考文章:4.海康威视-Springboot下实现注册与注销 - 测试抓图方法
抓图成功!