【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);
方法:
//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);
}