📄 jpg.cpp
字号:
/*******************************************************************************
Filename: JPG.cpp
Writer : Dai Zhiheng.
Time : 2005-5-14.
Description:
***************************************************************************/
#include <fstream.h>
#include "BitFileHead.h"
#include "readOrWriteFile.h"
#include "JPG.h"
void main()
{
//定义文件
char fileName[40]="lena256.bmp";
char outFileName[40]="lena256.JPG";
cout << "输入要处理的源BMP文件名(如\"C:\\\\Path1\\\\bmp1.bmp\"),如果在当前文件" <<endl;
cout << "夹,直接写文件名及扩展名(.BMP),要求图片的长宽等于2的指数次方:" <<endl ;
cin >> fileName;
cout<<endl;
cout << "输入输出的JPG文件名(如\"C:\\\\Path1\\\\bmp1.JPG\"),如果在当前文件" <<endl;
cout << "夹,直接写文件名及扩展名(.JPG):" <<endl ;
cin >> outFileName;
ifstream inFile;
inFile.open(fileName,ios::binary);
ofstream outFile;
outFile.open(outFileName,ios::binary);
cout <<endl << "………………………………………………………………………"<<endl;
//定义结构
tagBITMAPHEADER bmfh;
tagBITMAPINFOHEADER bmfih;
//读取图象相关信息
bmfh.bfSize = readBfSize(inFile);
cout <<" 文件大小为 : " <<dec <<bmfh.bfSize << " Bytes" <<endl;
bmfh.bfOffBits = readBfOffBits(inFile);
cout <<" 数据区偏移位置 : " <<bmfh.bfOffBits <<endl;
bmfih.biWidth = readBiWidth(inFile);
cout <<" 图象宽度 :" <<bmfih.biWidth<<endl;
bmfih.biHeight = readBiHeight(inFile);
cout <<" 图象长度 :" <<bmfih.biHeight<<endl;
bmfih.biPlanes = readBiPlanes(inFile);
cout <<" 位面个数:" <<bmfih.biPlanes <<endl;
bmfih.biBitCount = readBiBitCount(inFile);
cout <<" 位深度: "<<bmfih.biBitCount <<endl;
bmfih.biSizeImage = readBiSizeImage(inFile);
cout <<" 位图阵列大小:" ;
//cout << bmfih.biSizeImage <<endl;
cout <<bmfh.bfSize-bmfh.bfOffBits <<endl <<endl;
unsigned char *pbmpHeadBUF = new unsigned char[bmfh.bfOffBits];
unsigned char *pbmpBits = new unsigned char[bmfh.bfSize-bmfh.bfOffBits];
double *X1 = new double[bmfih.biHeight*bmfih.biWidth];//读取原图
//从BMP文件读取数据
inFile.seekg(0);
inFile.read(pbmpHeadBUF,bmfh.bfOffBits);
inFile.read(pbmpBits,bmfh.bfSize-bmfh.bfOffBits);
inFile.close();
//将数据变为double型:pbmpBits-->X1
for(int i=0; i<bmfih.biHeight; i++)
for(int j=0; j<bmfih.biWidth; j++)
{
*(X1 + i*bmfih.biWidth + j) = (double)(*(pbmpBits + (bmfih.biHeight-i-1)*bmfih.biWidth + j));
}
//JPG
jpg(X1, bmfih.biHeight, bmfih.biWidth, outFile);
delete []pbmpHeadBUF;
delete []pbmpBits;
delete []X1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -