【java】海康威視カメラ撮影画像をメモリに

1489 ワード

海康威視カメラ自体のSDKは:
//JPEGメモリへのスナップショット boolean  NET_DVR_CaptureJPEGPicture_NEW(NativeLong lUserID, NativeLong lChannel, NET_DVR_JPEGPARA lpJpegPara, String sJpegPicBuffer, int dwPicSize,  IntByReference lpSizeReturned);
4番目のパラメータ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);
	    }