|
@@ -0,0 +1,119 @@
|
|
|
+package com.sd.vision;
|
|
|
+
|
|
|
+import MvCameraControlWrapper.MvCameraControl;
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+
|
|
|
+import static MvCameraControlWrapper.MvCameraControl.MV_CC_EnumDevices;
|
|
|
+import static MvCameraControlWrapper.MvCameraControlDefines.*;
|
|
|
+
|
|
|
+public class Main {
|
|
|
+ public static void main(String[] args) {
|
|
|
+
|
|
|
+ Handle hCamera = null;
|
|
|
+ int nRet;
|
|
|
+
|
|
|
+ try {
|
|
|
+ ArrayList<MV_CC_DEVICE_INFO> stDeviceList = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE);
|
|
|
+ if (stDeviceList.isEmpty()) {
|
|
|
+ System.err.println("没有发现设备");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (stDeviceList.size() > 1) {
|
|
|
+ System.err.println("发现多台设备");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ MV_CC_DEVICE_INFO mvCcDeviceInfo = stDeviceList.get(0);
|
|
|
+
|
|
|
+ hCamera = MvCameraControl.MV_CC_CreateHandle(mvCcDeviceInfo);
|
|
|
+
|
|
|
+ // 打开设备
|
|
|
+ nRet = MvCameraControl.MV_CC_OpenDevice(hCamera);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("连接摄像机失败, errCode: [%#x]", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保触发模式是关闭的
|
|
|
+ nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "TriggerMode", "Off");
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("触发方式设置失败, errCode: [%#x]\n", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取有效负载大小
|
|
|
+ MVCC_INTVALUE stParam = new MVCC_INTVALUE();
|
|
|
+ nRet = MvCameraControl.MV_CC_GetIntValue(hCamera, "PayloadSize", stParam);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("获取有效载荷大小失败, errCode: [%#x]\n", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 开始抓取图片
|
|
|
+ nRet = MvCameraControl.MV_CC_StartGrabbing(hCamera);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("开始抓取失败, errCode: [%#x]\n", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存图片
|
|
|
+ saveImg(hCamera, stParam, "D://test222222.jpeg");
|
|
|
+
|
|
|
+ // 停止抓取图片
|
|
|
+ nRet = MvCameraControl.MV_CC_StopGrabbing(hCamera);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("停止抓取失败, errCode: [%#x]\n", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ if (null != hCamera) {
|
|
|
+ // 销毁处理
|
|
|
+ nRet = MvCameraControl.MV_CC_DestroyHandle(hCamera);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("销毁句柄失败, errCode: [%#x]\n", nRet);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private static void saveImg(Handle hCamera, MVCC_INTVALUE stParam, String path) {
|
|
|
+ // 得到一帧图片
|
|
|
+ MV_FRAME_OUT_INFO stImageInfo = new MV_FRAME_OUT_INFO();
|
|
|
+ byte[] pData = new byte[(int) stParam.curValue];
|
|
|
+ int nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 1000);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("得到一帧图片失败, errCode:[%#x]\n", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 每个RGB像素占用3个字节
|
|
|
+ int imageLen = stImageInfo.width * stImageInfo.height * 3;
|
|
|
+ byte[] imageBuffer = new byte[imageLen];
|
|
|
+
|
|
|
+ // 调用MV_CC_SaveImage将图像保存为JPEG
|
|
|
+ MV_SAVE_IMAGE_PARAM stSaveParam = new MV_SAVE_IMAGE_PARAM();
|
|
|
+ stSaveParam.width = stImageInfo.width; // image width
|
|
|
+ stSaveParam.height = stImageInfo.height; // image height
|
|
|
+ stSaveParam.data = pData; // image data
|
|
|
+ stSaveParam.dataLen = stImageInfo.frameLen; // image data length
|
|
|
+ stSaveParam.pixelType = stImageInfo.pixelType; // image pixel format
|
|
|
+ stSaveParam.imageBuffer = imageBuffer; // output image buffer
|
|
|
+ stSaveParam.imageType = MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg; // output image pixel format
|
|
|
+ stSaveParam.methodValue = 0; // Interpolation method that converts Bayer format to RGB24. 0-Neareast 1-double linear 2-Hamilton
|
|
|
+ stSaveParam.jpgQuality = 60; // JPG endoding quality(50-99]
|
|
|
+
|
|
|
+ nRet = MvCameraControl.MV_CC_SaveImage(hCamera, stSaveParam);
|
|
|
+ if (MV_OK != nRet) {
|
|
|
+ System.err.printf("保存图片失败, errCode: [%#x]\n", nRet);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将缓冲区内容保存到文件
|
|
|
+ FileUtil.writeBytes(imageBuffer, path);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|