• 大小: 106KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C/C++
  • 标签: jpg  jpeg  bmp  RGB  c++  

资源简介

网上找到的比较常见的jpg转bmp的C语言代码(出处不详),做了小的改动,包成一个函数,可以将一个jpg文件经过解码,可以得到相应的将RGB数据和尺寸数据。 工程是用vs2013建立的。

资源截图

代码片段和文件信息

// JpgToBmp.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“

/*
int _tmain(int argc _TCHAR* argv[])
{
return 0;
}
*/
#include
#include “jpeg.h“
#include “memory.h“
#include “math.h“
#include “stdio.h“
#include “windows.h“

//macro definition
#define WIDTHBYTES(i)    ((i+31)/32*4)
#define PI 3.1415926535
//define return value of function
#define FUNC_OK 0
#define FUNC_MEMORY_ERROR 1
#define FUNC_FILE_ERROR 2
#define FUNC_FORMAT_ERROR 3
//////////////////////////////////////////////////
//Jpeg functions
BOOL LoadJpegFile(char *BmpFileName);
void showerror(int funcret);
int  InitTag();
void InitTable();
int  Decode();
int  DecodeMCUBlock();
int  HufBlock(unsigned char dchufindex unsigned char achufindex);
int  DecodeElement();
void IQtIZzMCUComponent(short flag);
void IQtIZzBlock(short  *s int * d short flag);
void GetYUV(short flag);
void StoreBuffer();
BYTE ReadByte();
void Initialize_Fast_IDCT();
void Fast_IDCT(int * block);
void idctrow(int * blk);
void idctcol(int * blk);
//////////////////////////////////////////////////
//global variable declaration
BITMAPFILEHEADER   bf;
BITMAPINFOHEADER   bi;
HBITMAP            hBitmap = NULL;
HGLOBAL            hImgData = NULL;
DWORD              NumColors;
DWORD              LineBytes;
DWORD              ImgWidth = 0 ImgHeight = 0;
unsigned int       PcxBytesPerLine;
LPSTR              lpPtr;
//////////////////////////////////////////////////
//variables used in jpeg function
short SampRate_Y_H SampRate_Y_V;
short SampRate_U_H SampRate_U_V;
short SampRate_V_H SampRate_V_V;
short H_YtoU V_YtoU H_YtoV V_YtoV;
short Y_in_MCU U_in_MCU V_in_MCU;
unsigned char   *lpJpegBuf;
unsigned char   *lp;
short qt_table[3][64];
short comp_num;
BYTE comp_index[3];
BYTE     YDcIndex YAcIndex UVDcIndex UVAcIndex;
BYTE HufTabIndex;
short     *YQtTable *UQtTable *VQtTable;
BYTE And[9] = { 0 1 3 7 0xf 0x1f 0x3f 0x7f 0xff };
short     code_pos_table[4][16] code_len_table[4][16];
unsigned short code_value_table[4][256];
unsigned short huf_max_value[4][16] huf_min_value[4][16];
short BitPos CurByte;
short rrun vvalue;
short MCUBuffer[10 * 64];
int QtZzMCUBuffer[10 * 64];
short BlockBuffer[64];
short ycoef ucoef vcoef;
BOOL IntervalFlag;
short interval = 0;
int Y[4 * 64] U[4 * 64] V[4 * 64];
DWORD     sizei sizej;
short  restart;
static  long iclip[1024];
static  long *iclp;

////////////////////////////////////////////////////////////////
int LoadJpegFile(char *JpegFileName)
{
HFILE    hfjpg;
DWORD         ImgSize;
DWORD              JpegBufSize;
HFILE              hfbmp;
HGLOBAL    hJpegBuf;
int    funcret;
LPBITMAPINFOHEADER lpImgData;

if ((hfjpg = _lopen(JpegFileName OF_READ)) == HFILE_ERROR)
{
showerror(FUNC_FILE_ERROR);
return 0;
}
//get jpg file length
JpegBufSize = _llseek(hfjpg 0L SEEK_END);
//rewind to 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        758  1998-04-23 14:04  JpgToBmp\JpgToBmp\JPEG.H

     文件      28491  2015-01-20 12:15  JpgToBmp\JpgToBmp\JpgToBmp.cpp

     文件       4571  2015-01-20 10:01  JpgToBmp\JpgToBmp\JpgToBmp.vcxproj

     文件       1401  2015-01-20 10:01  JpgToBmp\JpgToBmp\JpgToBmp.vcxproj.filters

     文件       1517  2015-01-20 09:59  JpgToBmp\JpgToBmp\ReadMe.txt

     文件        214  2015-01-20 09:59  JpgToBmp\JpgToBmp\stdafx.cpp

     文件        234  2015-01-20 09:59  JpgToBmp\JpgToBmp\stdafx.h

     文件        236  2015-01-20 09:59  JpgToBmp\JpgToBmp\targetver.h

     文件      94152  2008-10-10 00:26  JpgToBmp\JpgToBmp\test.jpg

     文件        970  2015-01-20 09:59  JpgToBmp\JpgToBmp.sln

    ..A..H.     22528  2015-01-20 12:15  JpgToBmp\JpgToBmp.v12.suo

     目录          0  2015-01-20 12:15  JpgToBmp\JpgToBmp

     目录          0  2015-01-20 12:15  JpgToBmp

----------- ---------  ---------- -----  ----

               155072                    13


评论

共有 条评论