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

📄 imageproc.h

📁 GPS programme for changchun at 8X
💻 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 + -