⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageproc.cpp

📁 GPS programme for changchun at 8X
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						for (nDebugpixel=0; nDebugpixel<4008; nDebugpixel++)
						{
							pRecSubImgA[4008*nDebugline + nDebugpixel] = pRecSubImgA[4016*nDebugline + nDebugpixel];
						}
					}


//for test, save the subframe after decompressed;
				
					szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_%d.raw"),FindFileData.cFileName,nSubFramecont);	
					fSubframeRaw = fopen(szSubframeRaw,"wb+");			
					
					fwrite(pRecSubImgA,1,SUBFRAME_A_RECOVERED_LENGTH,fSubframeRaw);
			
					fclose(fSubframeRaw);


//for test, save the subframe before decompressed;
				
					szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_%d.dat"),FindFileData.cFileName,nSubFramecont);	
					fSubframeRaw = fopen(szSubframeRaw,"wb+");			
					
					fwrite(pSubFrameAToSpDec,1,SUBFRAME_A_TO_SPDEC_LENGTH,fSubframeRaw);
			
					fclose(fSubframeRaw);


					
 					memcpy(pRecImg,pRecSubImgA,SUBFRAME_A_RECOVERED_LENGTH);
					pRecImg = pRecImg + SUBFRAME_A_RECOVERED_LENGTH;					
				}
			}

			if ( !bFrameErrFlag)
			{
				nSubFramecont++;					
			}
			
		}//子帧循环结束;


		
		//存储图像文件,以帧为单位	
	    TRACE("Saving");
		nSavedImgFileNum=1;

		szName.Format(_T("e:\\Decompressed stream\\%s.bmp"),FindFileData.cFileName);	

	
		pRecImg = pThis->RecImg;//To point the pointer; 

		pThis->SaveImage(szName,pThis->m_vdw.pBmp,pRecImg);



//for test,save the raw

		szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s.raw"),FindFileData.cFileName);	
		fSubframeRaw = fopen(szSubframeRaw,"wb+");			
		fwrite(pRecImg,1,IMAGE_RECOVERED_LENGTH,fSubframeRaw);
			
		fclose(fSubframeRaw);



 		
		
		

		//TODO information packet
		//just save it
	



		nSavedInfoFileNum=1;
		szInfo.Format(_T("e:\\Decompressed stream\\%s_info.txt"),FindFileData.cFileName);	
		fInfo = fopen(szInfo,"wb+");
		

		for(;*(pStrAfterRSDec+PACKET_TYPE_OFFSET)==PACKET_OF_INFO;pStrAfterRSDec = pStrAfterRSDec + INFO_LENGTH + 1)
		{
		
			pStrAfterRSDec = pStrAfterRSDec + INFO_PACKET_OFFSET;
			fwrite(pStrAfterRSDec,sizeof(char),INFO_LENGTH,fInfo);

		} 

		fclose(fInfo);

		if (!bFrameErrFlag)
		{
			nFrameNum++;
		}
	
		nBlockCont++;//走步
		
 	}//帧(块)循环结束

//add error report

	fclose(fErrorReport);
	fErrorReport = NULL;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//读文件循环,完全拷贝

	while (FindNextFile(hFind, &FindFileData))
	{
		TRACE("The next file found is %s\n", FindFileData.cFileName);
		
		pThis->m_vdw.pTitle = (PCHAR)FindFileData.cFileName;
		sourcefile.Open(FindFileData.cFileName,CFile::modeRead);

		TRACE("note0.\n");

//add error report
		szErrorReport.Format(_T("e:\\Decompressed stream\\%s_error_report.txt"),FindFileData.cFileName);	
		fErrorReport = fopen(szErrorReport,"w+");
		
// 		fprintf(fErrorReport," count from 0\n");

		TRACE("note1.\n");

		nFileLength=sourcefile.GetLength();

		TRACE("note2.\n");

		nBlockNum=nFileLength/BLOCK_LENGTH;

		if (nBlockNum==0)
		{
			nBlockNum=1;
		}

		TRACE("nBlockNum==%d.\n",nBlockNum);

		nBlockCont = 0;

		while (nBlockCont<nBlockNum)//块循环,即帧循环
		{	
// 			TRACE("note0.\n");

			pRecImg = pThis->RecImg;//To point the pointer; 
			memset(pRecImg,0,IMAGE_RECOVERED_LENGTH);
			
// 			TRACE("note1.\n");

			pCurStream = pThis->CurStream;	
			memset(pCurStream,0,BLOCK_LENGTH);//清零
		
// 			TRACE("note2.\n");

			sourcefile.Read(pCurStream,BLOCK_LENGTH);//the position of the pointer is not changed;


//for test

			pCurStream = pCurStream + 1024*10;
// 			TRACE("note3.\n");
			for (test = 0; test<20; test++)
			{
				
				szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_RS%d.dat"),FindFileData.cFileName,test);	
				fSubframeRaw = fopen(szSubframeRaw,"wb+");			
				
				fwrite(pCurStream,1,SUBFRAME_A_LENGTH,fSubframeRaw);
				fclose(fSubframeRaw);
				pCurStream = pCurStream + SUBFRAME_A_LENGTH;
			

			}

// 			TRACE("note4.\n");
			szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_RS%d.dat"),FindFileData.cFileName,20);	
			fSubframeRaw = fopen(szSubframeRaw,"wb+");			
				
			fwrite(pCurStream,1,SUBFRAME_B_LENGTH,fSubframeRaw);
			fclose(fSubframeRaw);

//			TRACE("note5.\n");



			pCurStream = pThis->CurStream;	
			pStrAfterRSDec = pThis->StrAfterRSDec;
			memset(pStrAfterRSDec,0,BLOCK_LENGTH_AFTER_RSDEC);
	
// 			TRACE("note6.\n");
			fnRSDecDllEx(fErrorReport,pCurStream, PACKET_NUM_OF_BLOCK ,&pnPakDeced, &pnPakProed, pStrAfterRSDec);
			//After RSDec,pStrAfterRSDec is at the start of the data block;

			TRACE(" %d packets(1024) are received",pnPakProed);
			TRACE(" %d packets(1024) are RsDeced",pnPakDeced);
			
//add error report
			fprintf(fErrorReport," %d packets(1024) are received\n",pnPakProed);
			fprintf(fErrorReport," %d packets(1024) are RsDeced\n",pnPakDeced);




			chFrameFlag=pStrAfterRSDec[FRAME_TYPE_OFFSET];//useless	
	
			//To jump the 55 packets,find the packet of image frame
			while(!(pStrAfterRSDec[PACKET_TYPE_OFFSET]==PACKET_OF_IMAGE))
			{
				pStrAfterRSDec=pStrAfterRSDec+PACKET_LENGTH;
			}


			//Whether the frame is complete or not,the dealing is the same.
			nFrameNum=*(pStrAfterRSDec+FRAME_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+FRAME_NUM_HIGH_OFFSET))*16;				

			bFrameErrFlag=0;

			nSubFramecont=0;
	

			while(nSubFramecont<SUBFRAME_NUM_OF_FRAME&&!bFrameErrFlag)//子帧循环,从 1 开始计数
			{			
//Refresh				
				::SendMessage(pThis->m_hWnd, MSG_SHOWIMG, 0, (LPARAM)&pThis->m_vdw);//Display .bmp;
				
				nSubFrameNum=*(pStrAfterRSDec+SUBFRAME_NUM_OFFSET);

				nSubFramecont=nSubFrameNum;//重新计数

				TRACE("Processing subframe %d",nSubFramecont);

				bSubFrameErrFlag=0;			

//					//Stop subframe circle while the packet flag changed; 
//					if (chPacketFlag!=*(pStrAfterRSDec+PACKET_FLAG_OFFSET))
//					{
//						break;
//					}


				if (nSubFramecont==SUBFRAME_B_POS_OF_FRAME)// SubFrame type B;
				{
					
					for (arrPackNumcout=0;arrPackNumcout < PACKET_OF_SUBFRAME_B;arrPackNumcout++)//包计数数组复位
					{
						arrPackNumB[arrPackNumcout]=0;
					}
				
					pSubFrameBStart = pThis->SubFrameBStart;
					memset(pSubFrameBStart,0,SUBFRAME_B_LENGTH_AFTER_RSDEC);
					memcpy(pSubFrameBStart,pStrAfterRSDec,SUBFRAME_B_LENGTH_AFTER_RSDEC);
				
				//11.21 modified here;
					nPacketNum=(*(pStrAfterRSDec+PACKET_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+PACKET_NUM_HIGH_OFFSET))*256)/4;
					arrPackNumcout=0;//清零


					while (nPacketNum < PACKET_OF_SUBFRAME_B && !bSubFrameErrFlag&&!bFrameErrFlag)//包循环,从 1 开始计数
					{					
						if (!bSubFrameErrFlag&&!bFrameErrFlag)
						{							
							arrPackNumB[arrPackNumcout]=nPacketNum;	//记录包计数						
							arrPackNumcout++;
							pStrAfterRSDec=pStrAfterRSDec+PACKET_AFTER_RSDEC_LENGTH;	
							nPacketNum=(*(pStrAfterRSDec+PACKET_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+PACKET_NUM_HIGH_OFFSET))*256)/4;
						}	

						//如果帧计数出错,跳出
						if (nFrameNum!=*(pStrAfterRSDec+FRAME_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+FRAME_NUM_HIGH_OFFSET))*16)
						{							
							bFrameErrFlag=1;
						}
					
						//如果子帧计数出错,跳出
						if (nSubFramecont!=*(pStrAfterRSDec+SUBFRAME_NUM_OFFSET))
						{							
							bSubFrameErrFlag=1;
						}

					}
					
					if (!bFrameErrFlag)
					{
						nLastPackOfNoErrStream=pThis->TreatPackNumErrB(arrPackNumB);

						if (nLastPackOfNoErrStream < PACKET_OF_SUBFRAME_B -1)//Packet Lost;
						{
//add error report
							fprintf(fErrorReport,"%d packets of Subframe%d lost\n",PACKET_OF_SUBFRAME_B - 2 - nLastPackOfNoErrStream,nSubFramecont);
							TRACE("%d packets of Subframe%d lost\n",PACKET_OF_SUBFRAME_B - 2 - nLastPackOfNoErrStream,nSubFramecont);
						}
					
						pSubFrameBToSpDec = pThis->SubFrameBToSpDec;
						memset(pSubFrameBToSpDec,0,SUBFRAME_B_TO_SPDEC_LENGTH);
						nSpihtStrlen=pThis->FormSpDecStreamB(nLastPackOfNoErrStream,pSubFrameBStart,pSubFrameBToSpDec);
					
						pRecSubImgB = pThis->RecSubImgB;
 						memset(pRecSubImgB,0,SUBFRAME_B_RECOVERED_LENGTH);
						fnSpDecDll(pSubFrameBToSpDec,pRecSubImgB,nSpihtStrlen);//here is wrong, "00"//the first byte of the block SubFrameBToSpDec is the hold
//for debug vertion,delete the last 8 bytes in each line,change 4016 to 4008;				

						for (nDebugline=1; nDebugline<216; nDebugline++)
						{
							for (nDebugpixel=0; nDebugpixel<4008; nDebugpixel++)
							{
								pRecSubImgB[4008*nDebugline + nDebugpixel] = pRecSubImgB[4016*nDebugline + nDebugpixel];
							}
						}
					

//for test, save the subframe after decompressed;
				
						szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_%d.raw"),FindFileData.cFileName,nSubFramecont);	
						fSubframeRaw = fopen(szSubframeRaw,"wb+");			
					
						fwrite(pRecSubImgB,1,SUBFRAME_B_RECOVERED_LENGTH,fSubframeRaw);
			
						fclose(fSubframeRaw);
//for test, save the subframe before decompressed;
				
						szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_%d.dat"),FindFileData.cFileName,nSubFramecont);	
						fSubframeRaw = fopen(szSubframeRaw,"wb+");			
					
						fwrite(pSubFrameBToSpDec,1,SUBFRAME_B_TO_SPDEC_LENGTH,fSubframeRaw);
			
						fclose(fSubframeRaw);
					

						memcpy(pRecImg,pRecSubImgB,SUBFRAME_B_RECOVERED_LENGTH);
// 						pRecImg = pRecImg + SUBFRAME_B_RECOVERED_LENGTH;
					}


				}	
			
				
				if(nSubFramecont < (SUBFRAME_NUM_OF_FRAME - 1))//SubFrame type A;
				{
					for (arrPackNumcout=0;arrPackNumcout < PACKET_OF_SUBFRAME_A;arrPackNumcout++)
					{
						arrPackNumA[arrPackNumcout]=0;
					}
				
					pSubFrameAStart = pThis->SubFrameAStart;
					memset(pSubFrameAStart,0,SUBFRAME_A_LENGTH_AFTER_RSDEC);				
					memcpy(pSubFrameAStart,pStrAfterRSDec,SUBFRAME_A_LENGTH_AFTER_RSDEC);
				

					//After memcpy,pSubFrameAStart is at the start of the data block;
					//the position of pStrAfterRSDec dose not change.
				
					nPacketNum=(*(pStrAfterRSDec+PACKET_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+PACKET_NUM_HIGH_OFFSET))*256)/4;
					arrPackNumcout=0;//清零
					//take care -1	
					while (nPacketNum < PACKET_OF_SUBFRAME_A && !bSubFrameErrFlag&&!bFrameErrFlag)//包循环,从 1 开始计数
					{													
						
						if (!bSubFrameErrFlag&&!bFrameErrFlag)
						{							
							arrPackNumA[arrPackNumcout]=nPacketNum;	//记录包计数						
							arrPackNumcout++;
							pStrAfterRSDec=pStrAfterRSDec+PACKET_AFTER_RSDEC_LENGTH;	
							nPacketNum=(*(pStrAfterRSDec+PACKET_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+PACKET_NUM_HIGH_OFFSET))*256)/4;
						}

						//如果帧计数出错,跳出
						if (nFrameNum!=*(pStrAfterRSDec+FRAME_NUM_LOW_OFFSET)+(*(pStrAfterRSDec+FRAME_NUM_HIGH_OFFSET))*16)
						{							
							bFrameErrFlag=1;
						}
					
						//如果子帧计数出错,跳出
						if (nSubFramecont!=*(pStrAfterRSDec+SUBFRAME_NUM_OFFSET))
						{							
							bSubFrameErrFlag=1;
						}	
					}
					if (!bFrameErrFlag)
					{
						nLastPackOfNoErrStream=pThis->TreatPackNumErrA(arrPackNumA);

						if (nLastPackOfNoErrStream < PACKET_OF_SUBFRAME_A - 1)//Packet Lost;
						{
//add error report
							fprintf(fErrorReport,"%d packets of Subframe%d lost\n",PACKET_OF_SUBFRAME_A - 2 - nLastPackOfNoErrStream,nSubFramecont);
							TRACE("%d packets of Subframe%d lost\n",PACKET_OF_SUBFRAME_A -2 - nLastPackOfNoErrStream,nSubFramecont);
						}

						pSubFrameAToSpDec = pThis->SubFrameAToSpDec;//To point the pointer; 
						memset(pSubFrameAToSpDec,0,SUBFRAME_A_TO_SPDEC_LENGTH);
 						nSpihtStrlen=pThis->FormSpDecStreamA(nLastPackOfNoErrStream,pSubFrameAStart,pSubFrameAToSpDec);
					
						pRecSubImgA = pThis->RecSubImgA;//To point the pointer; 
						memset(pRecSubImgA,0,SUBFRAME_A_RECOVERED_LENGTH);
					
						fnSpDecDll(pSubFrameAToSpDec,pRecSubImgA,nSpihtStrlen);//the start of the block SubFrameBToSpDec is the hold"0d".

						
//for debug vertion,delete the last 8 bytes in each line,change 4016 to 4008;				

						for (nDebugline=1; nDebugline<256; nDebugline++)
						{
							for (nDebugpixel=0; nDebugpixel<4008; nDebugpixel++)
							{
								pRecSubImgA[4008*nDebugline + nDebugpixel] = pRecSubImgA[4016*nDebugline + nDebugpixel];
							}
						}

//for test, save the subframe after decompressed;
				
						szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_%d.raw"),FindFileData.cFileName,nSubFramecont);	
						fSubframeRaw = fopen(szSubframeRaw,"wb+");			
					
						fwrite(pRecSubImgA,1,SUBFRAME_A_RECOVERED_LENGTH,fSubframeRaw);
			
						fclose(fSubframeRaw);
						

//for test, save the subframe before decompressed;
				
						szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s_%d.dat"),FindFileData.cFileName,nSubFramecont);		
						fSubframeRaw = fopen(szSubframeRaw,"wb+");			
						
						fwrite(pSubFrameAToSpDec,1,SUBFRAME_A_TO_SPDEC_LENGTH,fSubframeRaw);
			
						fclose(fSubframeRaw);



 						memcpy(pRecImg,pRecSubImgA,SUBFRAME_A_RECOVERED_LENGTH);
						pRecImg = pRecImg + SUBFRAME_A_RECOVERED_LENGTH;					
					}
				}

				if ( !bFrameErrFlag)
				{
					nSubFramecont++;					
				}
			
			}//子帧循环结束;


		
			//存储文件,以帧为单位		

			nSavedImgFileNum++;

			szName.Format(_T("e:\\Decompressed stream\\%s.bmp"),FindFileData.cFileName);

			pRecImg = pThis->RecImg;//To point the pointer; 
			TRACE("Saving");
  			pThis->SaveImage(szName,pThis->m_vdw.pBmp,pRecImg);

//for test save the raw
			
			szSubframeRaw.Format(_T("e:\\Decompressed stream\\%s.raw"),FindFileData.cFileName);	
			fSubframeRaw = fopen(szSubframeRaw,"wb+");			

			fwrite(pRecImg,1,IMAGE_RECOVERED_LENGTH,fSubframeRaw);
			
			fclose(fSubframeRaw);			


		
//Display the image to the screen
		
//		    pRecImg = pThis->RecImg;//To point the pointer; 
// 			memcpy(pThis->m_vdw.pBuf,pRecImg,IMAGE_RECOVERED_LENGTH);
//			pThis->m_vdw.pBuf = (PCHAR)pRecImg;
			
// 			TRACE("Displaying");

//  			::ShowWindow (pThis->m_hWnd, SW_SHOWNORMAL);// keep the previous picture until the new one;
//  			::UpdateWindow(pThis->m_hWnd);
//  			::SendMessage(pThis->m_hWnd, MSG_SHOWIMG, 0, (LPARAM)&pThis->m_vdw);//Display .bmp;
	
			//TODO information packet
			//just save it


			nSavedInfoFileNum++;
			szInfo.Format(_T("e:\\Decompressed stream\\%s_info.txt"),FindFileData.cFileName);	
			fInfo = fopen(szInfo,"wb+");
		

			for(;*(pStrAfterRSDec+PACKET_TYPE_OFFSET)==PACKET_OF_INFO;pStrAfterRSDec = pStrAfterRSDec + INFO_LENGTH + 1)
			{
		
				pStrAfterRSDec = pStrAfterRSDec + INFO_PACKET_OFFSET;
				fwrite(pStrAfterRSDec,sizeof(char),INFO_LENGTH,fInfo);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -