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

📄 dpcmprocess.h

📁 采用DPCM压缩算法的工程文件
💻 H
字号:
// DpcmProcess.h: interface for the CDpcmProcess class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DPCMPROCESS_H__E99729C4_31F0_440C_862D_B04758E81C95__INCLUDED_)
#define AFX_DPCMPROCESS_H__E99729C4_31F0_440C_862D_B04758E81C95__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "CommonDecls.h"

//--------------------------------------------------------------------------
#define V(a,b,c,d) (((INT32)a << 16) | ((INT32)c << 8) | ((INT32)d << 7) | b)
#define RIGHT_SHIFT (x,shft) x>=0 ? x>>shft : -((-x)>>shft)

const INT32 jaritab[113] = {
/*
* Index, Qe_Value, Next_Index_LPS, Next_Index_MPS, Switch_MPS
	*/
	/*   0 */  V( 0x5a1d,   1,   1, 1 ),
	/*   1 */  V( 0x2586,  14,   2, 0 ),
	/*   2 */  V( 0x1114,  16,   3, 0 ),
	/*   3 */  V( 0x080b,  18,   4, 0 ),
	/*   4 */  V( 0x03d8,  20,   5, 0 ),
	/*   5 */  V( 0x01da,  23,   6, 0 ),
	/*   6 */  V( 0x00e5,  25,   7, 0 ),
	/*   7 */  V( 0x006f,  28,   8, 0 ),
	/*   8 */  V( 0x0036,  30,   9, 0 ),
	/*   9 */  V( 0x001a,  33,  10, 0 ),
	/*  10 */  V( 0x000d,  35,  11, 0 ),
	/*  11 */  V( 0x0006,   9,  12, 0 ),
	/*  12 */  V( 0x0003,  10,  13, 0 ),
	/*  13 */  V( 0x0001,  12,  13, 0 ),
	/*  14 */  V( 0x5a7f,  15,  15, 1 ),
	/*  15 */  V( 0x3f25,  36,  16, 0 ),
	/*  16 */  V( 0x2cf2,  38,  17, 0 ),
	/*  17 */  V( 0x207c,  39,  18, 0 ),
	/*  18 */  V( 0x17b9,  40,  19, 0 ),
	/*  19 */  V( 0x1182,  42,  20, 0 ),
	/*  20 */  V( 0x0cef,  43,  21, 0 ),
	/*  21 */  V( 0x09a1,  45,  22, 0 ),
	/*  22 */  V( 0x072f,  46,  23, 0 ),
	/*  23 */  V( 0x055c,  48,  24, 0 ),
	/*  24 */  V( 0x0406,  49,  25, 0 ),
	/*  25 */  V( 0x0303,  51,  26, 0 ),
	/*  26 */  V( 0x0240,  52,  27, 0 ),
	/*  27 */  V( 0x01b1,  54,  28, 0 ),
	/*  28 */  V( 0x0144,  56,  29, 0 ),
	/*  29 */  V( 0x00f5,  57,  30, 0 ),
	/*  30 */  V( 0x00b7,  59,  31, 0 ),
	/*  31 */  V( 0x008a,  60,  32, 0 ),
	/*  32 */  V( 0x0068,  62,  33, 0 ),
	/*  33 */  V( 0x004e,  63,  34, 0 ),
	/*  34 */  V( 0x003b,  32,  35, 0 ),
	/*  35 */  V( 0x002c,  33,   9, 0 ),
	/*  36 */  V( 0x5ae1,  37,  37, 1 ),
	/*  37 */  V( 0x484c,  64,  38, 0 ),
	/*  38 */  V( 0x3a0d,  65,  39, 0 ),
	/*  39 */  V( 0x2ef1,  67,  40, 0 ),
	/*  40 */  V( 0x261f,  68,  41, 0 ),
	/*  41 */  V( 0x1f33,  69,  42, 0 ),
	/*  42 */  V( 0x19a8,  70,  43, 0 ),
	/*  43 */  V( 0x1518,  72,  44, 0 ),
	/*  44 */  V( 0x1177,  73,  45, 0 ),
	/*  45 */  V( 0x0e74,  74,  46, 0 ),
	/*  46 */  V( 0x0bfb,  75,  47, 0 ),
	/*  47 */  V( 0x09f8,  77,  48, 0 ),
	/*  48 */  V( 0x0861,  78,  49, 0 ),
	/*  49 */  V( 0x0706,  79,  50, 0 ),
	/*  50 */  V( 0x05cd,  48,  51, 0 ),
	/*  51 */  V( 0x04de,  50,  52, 0 ),
	/*  52 */  V( 0x040f,  50,  53, 0 ),
	/*  53 */  V( 0x0363,  51,  54, 0 ),
	/*  54 */  V( 0x02d4,  52,  55, 0 ),
	/*  55 */  V( 0x025c,  53,  56, 0 ),
	/*  56 */  V( 0x01f8,  54,  57, 0 ),
	/*  57 */  V( 0x01a4,  55,  58, 0 ),
	/*  58 */  V( 0x0160,  56,  59, 0 ),
	/*  59 */  V( 0x0125,  57,  60, 0 ),
	/*  60 */  V( 0x00f6,  58,  61, 0 ),
	/*  61 */  V( 0x00cb,  59,  62, 0 ),
	/*  62 */  V( 0x00ab,  61,  63, 0 ),
	/*  63 */  V( 0x008f,  61,  32, 0 ),
	/*  64 */  V( 0x5b12,  65,  65, 1 ),
	/*  65 */  V( 0x4d04,  80,  66, 0 ),
	/*  66 */  V( 0x412c,  81,  67, 0 ),
	/*  67 */  V( 0x37d8,  82,  68, 0 ),
	/*  68 */  V( 0x2fe8,  83,  69, 0 ),
	/*  69 */  V( 0x293c,  84,  70, 0 ),
	/*  70 */  V( 0x2379,  86,  71, 0 ),
	/*  71 */  V( 0x1edf,  87,  72, 0 ),
	/*  72 */  V( 0x1aa9,  87,  73, 0 ),
	/*  73 */  V( 0x174e,  72,  74, 0 ),
	/*  74 */  V( 0x1424,  72,  75, 0 ),
	/*  75 */  V( 0x119c,  74,  76, 0 ),
	/*  76 */  V( 0x0f6b,  74,  77, 0 ),
	/*  77 */  V( 0x0d51,  75,  78, 0 ),
	/*  78 */  V( 0x0bb6,  77,  79, 0 ),
	/*  79 */  V( 0x0a40,  77,  48, 0 ),
	/*  80 */  V( 0x5832,  80,  81, 1 ),
	/*  81 */  V( 0x4d1c,  88,  82, 0 ),
	/*  82 */  V( 0x438e,  89,  83, 0 ),
	/*  83 */  V( 0x3bdd,  90,  84, 0 ),
	/*  84 */  V( 0x34ee,  91,  85, 0 ),
	/*  85 */  V( 0x2eae,  92,  86, 0 ),
	/*  86 */  V( 0x299a,  93,  87, 0 ),
	/*  87 */  V( 0x2516,  86,  71, 0 ),
	/*  88 */  V( 0x5570,  88,  89, 1 ),
	/*  89 */  V( 0x4ca9,  95,  90, 0 ),
	/*  90 */  V( 0x44d9,  96,  91, 0 ),
	/*  91 */  V( 0x3e22,  97,  92, 0 ),
	/*  92 */  V( 0x3824,  99,  93, 0 ),
	/*  93 */  V( 0x32b4,  99,  94, 0 ),
	/*  94 */  V( 0x2e17,  93,  86, 0 ),
	/*  95 */  V( 0x56a8,  95,  96, 1 ),
	/*  96 */  V( 0x4f46, 101,  97, 0 ),
	/*  97 */  V( 0x47e5, 102,  98, 0 ),
	/*  98 */  V( 0x41cf, 103,  99, 0 ),
	/*  99 */  V( 0x3c3d, 104, 100, 0 ),
	/* 100 */  V( 0x375e,  99,  93, 0 ),
	/* 101 */  V( 0x5231, 105, 102, 0 ),
	/* 102 */  V( 0x4c0f, 106, 103, 0 ),
	/* 103 */  V( 0x4639, 107, 104, 0 ),
	/* 104 */  V( 0x415e, 103,  99, 0 ),
	/* 105 */  V( 0x5627, 105, 106, 1 ),
	/* 106 */  V( 0x50e7, 108, 107, 0 ),
	/* 107 */  V( 0x4b85, 109, 103, 0 ),
	/* 108 */  V( 0x5597, 110, 109, 0 ),
	/* 109 */  V( 0x504f, 111, 107, 0 ),
	/* 110 */  V( 0x5a10, 110, 111, 1 ),
	/* 111 */  V( 0x5522, 112, 109, 0 ),
	/* 112 */  V( 0x59eb, 112, 111, 1 )
}; 

typedef enum {			/* JPEG marker codes */
	M_SOF0  = 0xc0,
		M_SOF1  = 0xc1,
		M_SOF2  = 0xc2,
		M_SOF3  = 0xc3,
		
		M_SOF5  = 0xc5,
		M_SOF6  = 0xc6,
		M_SOF7  = 0xc7,
		
		M_JPG   = 0xc8,
		M_SOF9  = 0xc9,
		M_SOF10 = 0xca,
		M_SOF11 = 0xcb,
		
		M_SOF13 = 0xcd,
		M_SOF14 = 0xce,
		M_SOF15 = 0xcf,
		
		M_DHT   = 0xc4,
		
		M_DAC   = 0xcc,
		
		M_RST0  = 0xd0,
		M_RST1  = 0xd1,
		M_RST2  = 0xd2,
		M_RST3  = 0xd3,
		M_RST4  = 0xd4,
		M_RST5  = 0xd5,
		M_RST6  = 0xd6,
		M_RST7  = 0xd7,
		
		M_SOI   = 0xd8,
		M_EOI   = 0xd9,
		M_SOS   = 0xda,
		M_DQT   = 0xdb,
		M_DNL   = 0xdc,
		M_DRI   = 0xdd,
		M_DHP   = 0xde,
		M_EXP   = 0xdf,
		
		M_APP0  = 0xe0,
		M_APP1  = 0xe1,
		M_APP2  = 0xe2,
		M_APP3  = 0xe3,
		M_APP4  = 0xe4,
		M_APP5  = 0xe5,
		M_APP6  = 0xe6,
		M_APP7  = 0xe7,
		M_APP8  = 0xe8,
		M_APP9  = 0xe9,
		M_APP10 = 0xea,
		M_APP11 = 0xeb,
		M_APP12 = 0xec,
		M_APP13 = 0xed,
		M_APP14 = 0xee,
		M_APP15 = 0xef,
		
		M_JPG0  = 0xf0,
		M_JPG13 = 0xfd,
		M_COM   = 0xfe,
		
		M_TEM   = 0x01,
		
		M_ERROR = 0x100
} JPEG_MARKER;

#define   PIXEL  unsigned char 
#define   UNI_TYPE int
#define T1 3
#define T2 7
#define T3 21
#define NEAR 6

#define PREDICTION(Rb, Ra, Rc,Px)	\
{	\
	register PIXEL minx;	\
	register PIXEL maxx;	\
	\
	if (Rb > Ra) {	\
	minx = Ra;	\
	maxx = Rb;	\
	} else {	\
	maxx = Ra;	\
	minx = Rb;	\
	}	\
	if (Rc >= maxx)	\
	Px = minx;	\
	else if (Rc <= minx)	\
	Px = maxx;	\
	else	\
	Px = Ra + Rb - Rc;	\
	}

#define   QUAN_GRAD(D,q) if (D<=-T3)q=-4;\
	else if (D<=-T2) q=-3;\
	else if (D<=-T1) q=-2;\
	else if (D< -NEAR) q=-1;\
	else if (D<=NEAR) q=0;\
	else if (D<T1) q=1;\
	else if (D<T2) q=2;\
	else if (D<T3) q=3;\
else q=4


#define PO_OR_NE(Q)  *sign_ptr= Q >= 0 ? 1 : (-1)
#define MAKE_FIRST_POSITIVE(Q1,Q2,Q3)       Q1 *=*sign_ptr;Q2 *=*sign_ptr;Q3 *=*sign_ptr
#define ABS(Q) Q >= 0 ? Q : -Q

class CDpcmProcess  
{
public:
	void Compress_Data(j_compress_ptr cinfo,int i);
	void Input_Image_Data(j_compress_ptr cinfo);
	void Free_Mem(j_compress_ptr cinfo);
	JSAMPARRAY Alloc_Sarray (JDIMENSION samplesperrow, JDIMENSION numrows,j_compress_ptr cinfo);
	void * Alloc_One_Row(j_compress_ptr cinfo,size_t size_object);
	int Get_Errval(j_compress_ptr cinfo,int Ra, PIXEL Rb, int Rc,PIXEL  Rd,PIXEL *x);
	int Find_Bin(UNI_TYPE Q1,UNI_TYPE Q2,UNI_TYPE Q3,UNI_TYPE *sign_ptr);
	void Write_File_Trailer (j_compress_ptr cinfo);
	void Write_File_Header (j_compress_ptr cinfo);
	void Emit_2Bytes (j_compress_ptr cinfo, int value);
	void Emit_Marker (j_compress_ptr cinfo, JPEG_MARKER mark);
	void Emit_Byte (j_compress_ptr cinfo, int val);
	void Empty_Output_Buffer (j_compress_ptr cinfo);
	void Encode_Row (j_compress_ptr cinfo,JSAMPROW row,int i);
	void Arith_Encode (j_compress_ptr cinfo, unsigned char *st, int val);
	void Flush_Bits (j_compress_ptr cinfo);
	CDpcmProcess();
	virtual ~CDpcmProcess();
	
	void Initial_Decoder(j_compress_ptr cinfo);
	void Decode_Row(j_compress_ptr cinfo , int i);
	int Arith_Decode(j_compress_ptr cinfo, unsigned char * st);
	int Get_Byte(j_compress_ptr cinfo);
	void Fill_Input_Buffer(j_compress_ptr cinfo); 
	int Return_Pixel_Val(j_compress_ptr cinfo , int Ra, PIXEL Rb, int Rc, PIXEL Rd, int errval);
};

#endif // !defined(AFX_DPCMPROCESS_H__E99729C4_31F0_440C_862D_B04758E81C95__INCLUDED_)

⌨️ 快捷键说明

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