📄 imageproc.h
字号:
/***********************************************************/
//vertion: Sam_2V1.1
//codemen : Adam
//Instruction: In this vertion ,we change the two dlls
// into several head files;
/***********************************************************/
#include "StdAfx.h"
#include <stdio.h>
#include "windows.h"
//for display
#define MSG_SHOWIMG WM_USER+0xB000
#define IMG_WIDTH 4008 //图像宽
#define IMG_HEIGHT 5336 //图像高
#define IMG_SIZE IMG_WIDTH*IMG_HEIGHT
#define BmpHeaderLen 54
#define SUBFRAME_A_LENGTH 128000 //1024 * 125
#define SUBFRAME_B_LENGTH 107520 //1024 * 125
#define SUBFRAME_A_TO_SPDEC_LENGTH 120100 // 936 + 961 * 124 = 120100 bytes
#define SUBFRAME_B_TO_SPDEC_LENGTH 100880 // 936 + 961 * 104 = 100880 bytes
#define PACKET_LENGTH 1024
#define BLOCK_LENGTH 2680832
#define BLOCK_LENGTH_AFTER_RSDEC 2534976//2608*972
#define SUBFRAME_A_LENGTH_AFTER_RSDEC 121500//125*972
#define SUBFRAME_B_LENGTH_AFTER_RSDEC 102060//105*972
//for debug vertion,delete the last 8 bytes in each line,change 4016 to 4008;
#define IMAGE_RECOVERED_LENGTH IMG_WIDTH*IMG_HEIGHT
#define SUBFRAME_A_RECOVERED_LENGTH 1026048//1026048--4008*256//1028096--4016*256
#define SUBFRAME_B_RECOVERED_LENGTH 865728//865728--4008*216//867456--4016*216
#define PACKET_NUM_OF_BLOCK 2618
#define PACKET_AFTER_RSDEC_LENGTH 972
#define PACKET_OF_INFO 0xFF
#define PACKET_OF_IMAGE 0x00
#define LEAD_PACKET 0x55
#define FRAME_TYPE_OFFSET 2
#define PACKET_TYPE_OFFSET 3
#define FRAME_NUM_LOW_OFFSET 4
#define FRAME_NUM_HIGH_OFFSET 5
#define SUBFRAME_NUM_OFFSET 8
#define PACKET_NUM_LOW_OFFSET 9
#define PACKET_NUM_HIGH_OFFSET 10
#define INFO_PACKET_OFFSET 10
#define INFO_LENGTH 961
#define FIRST_PACKET_FOR_SPDEC_OFFSET 35//正式版本
#define OTHER_PACKET_FOR_SPDEC_OFFSET 10//正式版本
#define FIRST_PACKET_FOR_SPDEC_LENFTH 936//正式版本
#define OTHER_PACKET_FOR_SPDEC_LENGTH 961//正式版本
#define PACKET_OF_SUBFRAME_A 125
#define PACKET_OF_SUBFRAME_B 105
#define SUBFRAME_NUM_OF_FRAME 21
#define SUBFRAME_B_POS_OF_FRAME 20
struct WinPar
{
int StarX; //左上角坐标(图像原点)
int StarY; //左上角坐标(图像原点)
int EndX; //右下角坐标
int EndY; //右下角坐标
};
//增加显示窗口 [05.12.11]
typedef struct
{
BITMAPINFO *pBmp; //显示图像信息
PCHAR pBuf; //显示缓存
WinPar *pWinPar; //显示窗口位置
PCHAR pTitle; //显示窗口名称
PCHAR pTxtShow;//显示解码信息
INT nTxtshowLen;
}VDWINDOW;
class ImageProc
{
public:
ImageProc(void);
public:
~ImageProc(void);
public:
CString m_sourcefile;
// HWND m_hWnd;
private:
unsigned char RecImg[IMAGE_RECOVERED_LENGTH];
unsigned char CurStream[BLOCK_LENGTH];
unsigned char StrAfterRSDec[BLOCK_LENGTH_AFTER_RSDEC];
unsigned char SubFrameAStart[SUBFRAME_A_LENGTH_AFTER_RSDEC];
unsigned char SubFrameBStart[SUBFRAME_B_LENGTH_AFTER_RSDEC];
unsigned char SubFrameAToSpDec[SUBFRAME_A_TO_SPDEC_LENGTH];
unsigned char SubFrameBToSpDec[SUBFRAME_B_TO_SPDEC_LENGTH];//modified here.//adam/2006/11/25
unsigned char RecSubImgA[SUBFRAME_A_RECOVERED_LENGTH];
unsigned char RecSubImgB[SUBFRAME_A_RECOVERED_LENGTH];
//内存越界1,概数组之后不保存任何东西;
//但仍有隐患,建起空间开大,避免越界,消除隐患
//原来AB类子帧独立解码,B类子帧解码后的存储数组RecSubImgB大小为
//[SUBFRAME_B_RECOVERED_LENGTH],但当B类子帧改为按A类子帧解码时,其恢复后得的大小
//变为[SUBFRAME_A_RECOVERED_LENGTH],要比其存储空间大,因此在运行时发生越界,
//而此时数组RecImg恰在RecSubImgB之后,故RecImg的内容改变;
protected:
//related with creation of display.
HANDLE m_hBitmap;
HDC m_hMemDC;
HDC m_hdc;
WNDCLASS m_wndclass ;
HINSTANCE m_hinst;
//BITMAPINFO *m_pBmp;
BYTE m_abyImgBuf[BmpHeaderLen+IMG_WIDTH*IMG_HEIGHT];
public:
HWND m_hWnd;
static BITMAPINFO *m_pBmp;//for display
WinPar m_WinPar;
VDWINDOW m_vdw;
CString m_sourcefilename;
protected:
static DWORD WINAPI InitShowWnd(LPVOID lpvoid);
static LRESULT CALLBACK DispProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
public:
static DWORD WINAPI ImageProcThread(LPVOID lpvoid);
private:
void RsDec();
int TreatPackNumErrA(int arrPackNumA[PACKET_OF_SUBFRAME_A]);
int TreatPackNumErrB(int arrPackNumB[PACKET_OF_SUBFRAME_B]);
int FormSpDecStreamA(int nLastPackOfNoErrStream,unsigned char*pSubFrameStart,unsigned char* pStrToSpDec);
int FormSpDecStreamB(int nLastPackOfNoErrStream,unsigned char*pSubFrameStart,unsigned char* pStrToSpDec);
void SaveImage(CString szImageName, PBITMAPINFO pbi,unsigned char* pbyImgData);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -