Jpeg.h
上传用户:hyb6888
上传日期:2016-01-24
资源大小:5186k
文件大小:3k
源码类别:

输入法编程

开发平台:

Visual C++

  1. #if !defined(jpeg_default)
  2. #define jpeg_default
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. #include "windows.h"
  7. #include "memory.h"
  8. #include "math.h"
  9. #include "stdio.h"
  10. #define M_SOF0  0xc0
  11. #define M_DHT   0xc4
  12. #define M_EOI   0xd9
  13. #define M_SOS   0xda
  14. #define M_DQT   0xdb
  15. #define M_DRI   0xdd
  16. #define M_APP0  0xe0
  17. static int Zig_Zag[8][8]={{0,1,5,6,14,15,27,28},
  18.   {2,4,7,13,16,26,29,42},
  19.   {3,8,12,17,25,30,41,43},
  20.   {9,11,18,24,37,40,44,53},
  21.   {10,19,23,32,39,45,52,54},
  22.   {20,22,33,38,46,51,55,60},
  23.   {21,34,37,47,50,56,59,61},
  24.   {35,36,48,49,57,58,62,63}
  25.  };
  26. #define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
  27. #define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
  28. #define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
  29. #define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
  30. #define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
  31. #define W7 565  /* 2048*sqrt(2)*cos(7*pi/16) */
  32. //macro definition
  33. #define WIDTHBYTES(i)  ((i+31)/32*4)
  34. #define PI 3.1415926535
  35. //define return value of function
  36. #define FUNC_OK 0
  37. #define FUNC_MEMORY_ERROR 1
  38. #define FUNC_FILE_ERROR 2
  39. #define FUNC_FORMAT_ERROR 3
  40. class JPEG{
  41. //////////////////////////////////////////////////
  42. //global variable declaration
  43. BITMAPFILEHEADER   bf;
  44. BITMAPINFOHEADER   bi;
  45. DWORD              NumColors;
  46. DWORD              LineBytes;
  47. DWORD              ImgWidth, ImgHeight;
  48. unsigned int       PcxBytesPerLine;
  49. LPSTR              lpPtr;
  50. //////////////////////////////////////////////////
  51. //variables used in jpeg function
  52. short SampRate_Y_H,SampRate_Y_V;
  53. short SampRate_U_H,SampRate_U_V;
  54. short SampRate_V_H,SampRate_V_V;
  55. short H_YtoU,V_YtoU,H_YtoV,V_YtoV;
  56. short Y_in_MCU,U_in_MCU,V_in_MCU;
  57. unsigned char   *lpJpegBuf;
  58. unsigned char   *lp;
  59. short qt_table[3][64];
  60. short comp_num;
  61. BYTE comp_index[3];
  62. BYTE     YDcIndex,YAcIndex,UVDcIndex,UVAcIndex;
  63. BYTE HufTabIndex;
  64. short     *YQtTable,*UQtTable,*VQtTable;
  65. BYTE And[9];
  66. short     code_pos_table[4][16],code_len_table[4][16];
  67. unsigned short code_value_table[4][256];
  68. unsigned short huf_max_value[4][16],huf_min_value[4][16];
  69. short BitPos,CurByte;
  70. short rrun,vvalue;
  71. short MCUBuffer[10*64];
  72. int QtZzMCUBuffer[10*64];
  73. short BlockBuffer[64];
  74. short ycoef,ucoef,vcoef;
  75. BOOL IntervalFlag;
  76. short interval;
  77. int Y[4*64],U[4*64],V[4*64];
  78. DWORD     sizei,sizej;
  79. short  restart;
  80. public:
  81. HPALETTE           hPalette;
  82. HBITMAP            hBitmap;
  83. HGLOBAL            hImgData;
  84.   long iclip[1024];
  85.   long *iclp;
  86. ///////////////////////////////////////////////////////////
  87. public:
  88. JPEG();
  89. int showpic(HDC hDC);
  90. int MainWndProc(HWND , UINT,WPARAM, LPARAM);
  91. BOOL LoadPcxFile(HWND hWnd,char *BmpFileName);
  92. void ReadPcxLine(unsigned char *p,FILE *fp);
  93. //////////////////////////////////////////////////
  94. //Jpeg functions
  95. BOOL LoadJpegFile(HWND hWnd,char *BmpFileName);
  96. BOOL LoadJpegFile (HDC hDc,char *JpegFileName);
  97. void showerror(int funcret);
  98. int  InitTag();
  99. void InitTable();
  100. int  Decode();
  101. int  DecodeMCUBlock();
  102. int  HufBlock(BYTE dchufindex,BYTE achufindex);
  103. int  DecodeElement();
  104. void IQtIZzMCUComponent(short flag);
  105. void IQtIZzBlock(short  *s ,int * d,short flag);
  106. void GetYUV(short flag);
  107. void StoreBuffer();
  108. BYTE ReadByte();
  109. void Initialize_Fast_IDCT();
  110. void Fast_IDCT(int * block);
  111. void idctrow(int * blk);
  112. void idctcol(int * blk);
  113. };
  114. #endif // !defined()