资源简介
网上找到的比较常见的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
相关资源
- C编写的读取BMP文件的程序
- C/C++语言图像处理:各种滤波
- c++ bmp位图修改读取头文件
- MFC数字图像处理BMP格式读取 保存 DF
- 通过封装的opencv函数进行yuv.nv12到jp
- mjpeg解码源代码
- 图像压缩算法JPEG源代码实现(C语言)
- C中如何显示bmp文件,教你C语言编程的
- jpeg软编码
- VC++图片控件(Picture Control)显示资源
- ffmpeg视频生成jpg图片
- C++实战源码-将AVI动画分解成BMP位图
- C++实战源码-浏览大幅BMP图片
- jpg里藏压缩包
- bmp、jpg、gif图片隐写
- C++实战源码-将BMP位图组合成AVI动画
- c++ 连续的bmp图片转avi
- BMP图像处理程序,包括轮廓识别,图
- 一个用MFC制作的把DICOM图像转换成BM
- 24位真彩色转单色bmp1位
- jpeg压缩C语言实现
- 纯C++实现bmp图片旋转
- bmp位图文件的读取与保存
- Linux jpg转bmp
- 获取jpg文件宽和高
- 动态规划灰度压缩bmp
- linux C语言实现yuyv拍照保存并转为jp
- 图像处理-bmp图像均值滤波-C++
- C语言 中值滤波器
- C++调用摄像头
评论
共有 条评论