【java】海康威视摄像头拍摄图片到内存中

海康威视摄像头本身的SDK为:

//JPEG抓图到内存
 boolean  NET_DVR_CaptureJPEGPicture_NEW(NativeLong lUserID, NativeLong lChannel, NET_DVR_JPEGPARA lpJpegPara, String sJpegPicBuffer, int dwPicSize,  IntByReference lpSizeReturned);

发现第四个参数sJpegPicBuffer是无法获取到内存数据。改用了指针对象则可以获取到数据。

改为指针对象:

 boolean  NET_DVR_CaptureJPEGPicture_NEW(NativeLong lUserID, NativeLong lChannel, NET_DVR_JPEGPARA lpJpegPara, Pointer p, int dwPicSize,  IntByReference lpSizeReturned);


方法:

//抓取到内存
		public byte[] CaptureJPEGPicture_NEW(){
			byte[] bytes = null;
			boolean returnboll=false;
			if (m_lUserID.longValue()>-1){
				HCNetSDK.NET_DVR_JPEGPARA jpeginfo=new HCNetSDK.NET_DVR_JPEGPARA();
				jpeginfo.wPicQuality=2;
				jpeginfo.wPicSize=0;
				int dwPicSize = 200*1024;
				IntByReference lpSizeReturned = new IntByReference();
				lpSizeReturned.setValue(0);
				NativeLong DVRChannel=new NativeLong(); 
				DVRChannel.setValue(1);
				Date date=new Date();
				DateFormat format=new SimpleDateFormat("yyyyMMddHHmm");
				Pointer p = new Memory(200*1024);
				returnboll = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, DVRChannel, jpeginfo, p, dwPicSize, lpSizeReturned);
				bytes = p.getByteArray(0, lpSizeReturned.getValue());
			}
			return bytes;
		}
		
		//byte[]转base64  
	    public static String byte2Base64StringFun(byte[] b){  
	    	Base64 base64 = new Base64();
	        return base64.encodeToString(b);
	    }


你可能感兴趣的:(java)