📄 imageproc.cpp
字号:
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 + -