Răsfoiți Sursa

#IQRV #comment: 图片透传demo

陈纪林80310970 4 luni în urmă
părinte
comite
25014844c3

+ 17 - 0
DevAdapter/include/IDCerClass.h

@@ -14,6 +14,7 @@ const int IDCER_EIGHT_BYTE_SIZE = 8;
 const int MAX_IDCER_SIMPLE_INFO_SIZE = 32;
 const int MAX_IDCER_INFO_SIZE = 128;
 const int MAX_IDCER_PHOTO_PATH = 260;
+const int PIC_STORE_LENGTH = 512 * 1024; //1MB
 
 //二代身份证信息结构(需要支持外国人永久居留证请使用IDCerInfoEx)
 //请务必按照各字段指定格式返回数据
@@ -238,6 +239,22 @@ struct IDCerInfoEx
  		CHAR data[MAX_IDCER_SIMPLE_INFO_SIZE];
  		DWORD dwSize;
  	}reserved5;
+	//图片透传demo
+	struct HeadPicStoreDemo
+	{
+		CHAR* headPtr;
+		DWORD dwSize;
+	}headPicStoreDemo;
+	struct FrontPicStoreDemo
+	{
+		CHAR* frontPtr;
+		DWORD dwSize;
+	}frontPicStoreDemo;
+	struct BackPicStoreDemo
+	{
+		CHAR* backPtr;
+		DWORD dwSize;
+	}backPicStoreDemo;
  };
 
 class IDCerClass : public DeviceBaseClass  

+ 49 - 1
DevAdapter/simulator/idcer.1.1/idcer_impl.cpp

@@ -173,6 +173,10 @@ ErrorCodeEnum IDCerClassImpl::ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2)
             return Error_Unexpect;
         }
 
+        idCerInfoEx2.headPicStoreDemo.dwSize = GetHeadPhoto(idCerInfoEx2.headPicStoreDemo.headPtr);
+        idCerInfoEx2.frontPicStoreDemo.dwSize = GetFrontPhoto(idCerInfoEx2.frontPicStoreDemo.frontPtr);
+        idCerInfoEx2.backPicStoreDemo.dwSize = GetBackPhoto(idCerInfoEx2.backPicStoreDemo.backPtr);
+
 #ifdef _MSC_VER
         ConvertGBKToUtf8(idCerRet.name.data);
         ConvertGBKToUtf8(idCerRet.sex.data);
@@ -313,7 +317,9 @@ ErrorCodeEnum IDCerClassImpl::ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2)
 
 IDCerClassImpl::IDCerClassImpl()
 {
-
+    headImg = NULL;
+    frontImg = NULL; 
+    backImg = NULL;
 }
 
 IDCerClassImpl::~IDCerClassImpl()
@@ -486,6 +492,48 @@ ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
     return err;
 }
 
+DWORD IDCerClassImpl::GetHeadPhoto(char* &headPtr)
+{
+    if (!headImg)
+    {
+        free(headImg);
+    }
+    headImg = (char*)malloc(PIC_STORE_LENGTH);
+    int i = 0;
+    for (i = 0; i < PIC_STORE_LENGTH; i++)headImg[i] = rand() % 256;
+
+    headPtr = headImg;
+    return PIC_STORE_LENGTH;
+}
+
+DWORD IDCerClassImpl::GetFrontPhoto(char*& frontPtr)
+{
+    if (!frontImg)
+    {
+        free(frontImg);
+    }
+    frontImg = (char*)malloc(PIC_STORE_LENGTH);
+    int i = 0;
+    for (i = 0; i < PIC_STORE_LENGTH; i++)frontImg[i] = rand() % 256;
+
+    frontPtr = frontImg;
+    return PIC_STORE_LENGTH;
+}
+
+DWORD IDCerClassImpl::GetBackPhoto(char*& backPtr)
+{
+    if (!backImg)
+    {
+        free(backImg);
+    }
+    backImg = (char*)malloc(PIC_STORE_LENGTH);
+    int i = 0;
+    for (i = 0; i < PIC_STORE_LENGTH; i++)backImg[i] = rand() % 256;
+
+    backPtr = backImg;
+    return PIC_STORE_LENGTH;
+}
+
 #ifdef _MSC_VER
 BOOL APIENTRY DllMain(HMODULE hModule,
     DWORD  ul_reason_for_call,

+ 7 - 0
DevAdapter/simulator/idcer.1.1/idcer_impl.h

@@ -13,6 +13,8 @@ public:
     IDCerClassImpl();
     ~IDCerClassImpl();
 
+    char* headImg, *frontImg, *backImg;
+
     //DeviceBaseClass
     ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
     ErrorCodeEnum Reset();
@@ -33,6 +35,11 @@ public:
 
     ///////身份证数据格式转换函数////////
     ErrorCodeEnum ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2);
+
+    ///////身份证图片透传Demo////////
+    DWORD GetHeadPhoto(char* &headPtr);
+    DWORD GetFrontPhoto(char*& frontPtr);
+    DWORD GetBackPhoto(char*& backPtr);
 };
 
 

+ 72 - 60
Module/mod_IDCertificate/IDCertFSM.cpp

@@ -536,6 +536,8 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 {
 	LOG_FUNCTION();
 
+	memset(&idInfoEx2, 0, sizeof(idInfoEx2));
+
 	ULLINT OpenRFControlTime = 0;
 	ULLINT CloseRFControlTime = 0;
 	ULLINT IDCerAuthenticateTime = 0;
@@ -556,14 +558,6 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 	DeleteZP(Bmp_ZP | Bmp_SCAN, 1);
 
 	bool bOpenRF = false, bGetIDCert = false;
-	IDCerInfoEx2 idInfoEx2;
-	IDCerInfoEx idInfo;
-	IDCerInfo idInfoOld;
-
-	memset(&idInfoEx2, 0, sizeof(idInfoEx2));
-	memset(&idInfo, 0, sizeof(idInfo));
-	memset(&idInfoOld, 0, sizeof(idInfoOld));
-
 	m_bCancelRead = false;
 	m_bWaitReadMore = false;
 	m_bReading = true;
@@ -817,7 +811,12 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 					memcpy(ctx->Ans.reserved_utf8.m_pData, reserved, strlen((char*)reserved)); //新外国人永居证关联字段
 					memcpy(ctx->Ans.othercode_utf8.m_pData, englishNameEx, strlen((char*)englishNameEx)); //英文名备用字段
 
-					GetPngBlobEx(ctx->Ans.headphoto, "zp"); //转换头像图片
+					//GetPngBlobEx(ctx->Ans.headphoto, "zp"); //转换头像图片
+
+					//图片透传demo
+					ctx->Ans.headphoto.Alloc(idInfoEx2.headPicStoreDemo.dwSize);
+					memcpy(ctx->Ans.headphoto.m_pData, idInfoEx2.headPicStoreDemo.headPtr, idInfoEx2.headPicStoreDemo.dwSize);
+					Dbg("头像图片获取成功,长度:%ld.", idInfoEx2.headPicStoreDemo.dwSize);
 
 					ctx->Ans.hasscan = 0;
 					if (igestionVer == TRUE) //吸入式设备才调用正反扫描功能
@@ -827,60 +826,73 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 						m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
 						ScanIDAndSaveImageTime = m_ullEndTime - m_ullBeginTime;
 
+						//图片透传demo
 						if (eErr == Error_Succeed)
 						{
-							curDeleteType = Bmp_ZP | Bmp_SCAN;
-							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage")
-								.setCostTime(ScanIDAndSaveImageTime)();
-
-							transImgMsg.Clear();
-							//idfront.bmp" and "idback.bmp
-							ErrorCodeEnum eErrFront, eErrBack;
-							eErrFront = GetPngBlobEx(ctx->Ans.frontphoto, "idfront");
-							eErrBack = GetPngBlobEx(ctx->Ans.backphoto, "idback");
-							if (eErrFront == Error_Succeed && eErrBack == Error_Succeed)
-							{
-								ctx->Ans.hasscan = 1;
-#ifdef RVC_OS_WIN
-								if (!closeImgCheck)
-								{
-									ImgChekTask* frontImgCheck = new ImgChekTask(this);
-									frontImgCheck->idNum =/* ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
-									frontImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
-									frontImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
-									frontImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
-									frontImgCheck->imgInput = ctx->Ans.frontphoto;
-									frontImgCheck->imgType = "正面";
-									GetEntityBase()->GetFunction()->PostThreadPoolTask(frontImgCheck);
-
-									ImgChekTask* backImgCheck = new ImgChekTask(this);
-									backImgCheck->idNum = /*ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
-									backImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
-									backImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
-									backImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
-									backImgCheck->imgInput = ctx->Ans.backphoto;
-									frontImgCheck->imgType = "背面";
-									GetEntityBase()->GetFunction()->PostThreadPoolTask(backImgCheck);
-								}
-#endif
-							}
-							else
-							{
-								CSimpleStringA warnMsg = "ScanIDAndSaveImage() suc. But GetPngBlobEx() failed.";
-								if (transImgMsg.GetLength() != 0)
-								{
-									warnMsg = warnMsg + transImgMsg;
-								}
-								LogWarn(Severity_Middle, Error_Succeed,
-									IDCertificate_UserErrorCode_ReadAndScan_TransImgFaild, warnMsg.GetData());
-							}
-						}
-						else
-						{
-							if (eErr != Error_NotImpl)
-								SetErrorAndLog(eErr, MEC_DEVAPI_IDCER_ScanIDAndSaveImage, "DevAdapter::ScanIDAndSaveImage", __FUNCTION__,
-									false, ScanIDAndSaveImageTime);
+							ctx->Ans.hasscan = 1;
+							ctx->Ans.frontphoto.Alloc(idInfoEx2.frontPicStoreDemo.dwSize);
+							ctx->Ans.backphoto.Alloc(idInfoEx2.backPicStoreDemo.dwSize);
+							memcpy(ctx->Ans.frontphoto.m_pData, idInfoEx2.frontPicStoreDemo.frontPtr, idInfoEx2.frontPicStoreDemo.dwSize);
+							memcpy(ctx->Ans.backphoto.m_pData, idInfoEx2.backPicStoreDemo.backPtr, idInfoEx2.backPicStoreDemo.dwSize);
+
+							Dbg("正面图片获取成功,长度:%ld.", idInfoEx2.frontPicStoreDemo.dwSize);
+							Dbg("背面图片获取成功,长度:%ld.", idInfoEx2.backPicStoreDemo.dwSize);
 						}
+
+//						if (eErr == Error_Succeed)
+//						{
+//							curDeleteType = Bmp_ZP | Bmp_SCAN;
+//							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage")
+//								.setCostTime(ScanIDAndSaveImageTime)();
+//
+//							transImgMsg.Clear();
+//							//idfront.bmp" and "idback.bmp
+//							ErrorCodeEnum eErrFront, eErrBack;
+//							eErrFront = GetPngBlobEx(ctx->Ans.frontphoto, "idfront");
+//							eErrBack = GetPngBlobEx(ctx->Ans.backphoto, "idback");
+//							if (eErrFront == Error_Succeed && eErrBack == Error_Succeed)
+//							{
+//								ctx->Ans.hasscan = 1;
+//#ifdef RVC_OS_WIN
+//								if (!closeImgCheck)
+//								{
+//									ImgChekTask* frontImgCheck = new ImgChekTask(this);
+//									frontImgCheck->idNum =/* ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
+//									frontImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
+//									frontImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
+//									frontImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
+//									frontImgCheck->imgInput = ctx->Ans.frontphoto;
+//									frontImgCheck->imgType = "正面";
+//									GetEntityBase()->GetFunction()->PostThreadPoolTask(frontImgCheck);
+//
+//									ImgChekTask* backImgCheck = new ImgChekTask(this);
+//									backImgCheck->idNum = /*ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
+//									backImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
+//									backImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
+//									backImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
+//									backImgCheck->imgInput = ctx->Ans.backphoto;
+//									frontImgCheck->imgType = "背面";
+//									GetEntityBase()->GetFunction()->PostThreadPoolTask(backImgCheck);
+//								}
+//#endif
+//							}
+//							else
+//							{
+//								CSimpleStringA warnMsg = "ScanIDAndSaveImage() suc. But GetPngBlobEx() failed.";
+//								if (transImgMsg.GetLength() != 0)
+//								{
+//									warnMsg = warnMsg + transImgMsg;
+//								}
+//								LogWarn(Severity_Middle, Error_Succeed,
+//									IDCertificate_UserErrorCode_ReadAndScan_TransImgFaild, warnMsg.GetData());
+//							}
+//						}
+//						else
+//						{
+//							if (eErr != Error_NotImpl)
+//								SetErrorAndLog(eErr, MEC_DEVAPI_IDCER_ScanIDAndSaveImage, "DevAdapter::ScanIDAndSaveImage", __FUNCTION__,
+//									false, ScanIDAndSaveImageTime);
+//						}
 					}
 
 #ifdef RVC_OS_WIN

+ 2 - 0
Module/mod_IDCertificate/IDCertFSM.h

@@ -276,6 +276,8 @@ private:
 	CSimpleStringA GetFileHashStr(CSimpleStringA filePath);
 	CSimpleStringA GetFileLastModifyTime(CSimpleStringA filePath);
 
+	IDCerInfoEx2 idInfoEx2;
+
 public:
 		std::string checkImgURL;
 private: