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

📄 readorwritefile.h

📁 实现jpeg的压缩编码功能 在demo2的工程文件中即可查看
💻 H
字号:
/*************************************************************
Filename:	readOrWriteFile.h.
Writer:		Dai Zhiheng.
Time:		2005-3-27.
**************************************************************/
/*************************************************************
函数功能:	获取文件类型信息
函数参数:
			bmf		写入文件流结构
返回值:	=0x4D42
**************************************************************/
unsigned short readBfType(ifstream bmf)
{
	bmf.seekg(0);
	unsigned char bmfhBuf[2];
	for(int i=0;i<2; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned short)*(bmfhBuf+1)<<8)+(unsigned short)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取文件的长度(包含文件头、信息头、调色板、图象数据)
函数参数:
			bmf		写入文件流结构
返回值:	文件的长度
**************************************************************/
unsigned long readBfSize(ifstream bmf)
{
	bmf.seekg(2);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取图象数据相对于文件头的偏移距离
函数参数:
			bmf		写入文件流结构
返回值:	图象数据偏移量
**************************************************************/
unsigned long readBfOffBits(ifstream bmf)
{
	bmf.seekg(10);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}

//以下函数用来获取图象文件的信息头内容
/*************************************************************
函数功能:	获取信息头长度
函数参数:
			bmf		写入文件流结构
返回值:	信息头长度
**************************************************************/
unsigned long readBiSize(ifstream bmf)
{
	bmf.seekg(14);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取DIB的宽度
函数参数:
			bmf		写入文件流结构
返回值:	DIB的宽度
**************************************************************/

long readBiWidth(ifstream bmf)
{
	bmf.seekg(18);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((long)*(bmfhBuf+3)<<24)+((long)*(bmfhBuf+2)<<16)
		+((long)*(bmfhBuf+1)<<8)+(long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取DIB的高度
函数参数:
			bmf		写入文件流结构
返回值:	DIB的高度
**************************************************************/
long readBiHeight(ifstream bmf)
{
	bmf.seekg(22);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((long)*(bmfhBuf+3)<<24)+((long)*(bmfhBuf+2)<<16)
		+((long)*(bmfhBuf+1)<<8)+(long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取位面个数
函数参数:
			bmf		写入文件流结构
返回值:	=1
**************************************************************/
unsigned short readBiPlanes(ifstream bmf)
{
	bmf.seekg(26);
	unsigned char bmfhBuf[2];
	for(int i=0;i<2; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned short)*(bmfhBuf+1)<<8)+(unsigned short)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取位深度
函数参数:
			bmf		写入文件流结构
返回值:	
			//1:	单色位图
			//4:	16色位图
			//8:	256色位图
			//16:	16位增强色位图
			//24:	24位真彩色位图
			//32:	32位真彩色位图	
**************************************************************/
unsigned short readBiBitCount(ifstream bmf)
{
	bmf.seekg(28);
	unsigned char bmfhBuf[2];
	for(int i=0;i<2; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned short)*(bmfhBuf+1)<<8)+(unsigned short)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取图象的压缩格式
函数参数:
			bmf		写入文件流结构
返回值:	压缩格式
**************************************************************/
unsigned long readBiCompression(ifstream bmf)
{
	bmf.seekg(30);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取位图阵列的大小
函数参数:
			bmf		写入文件流结构
返回值:	位图阵列大小
**************************************************************/
unsigned long readBiSizeImage(ifstream bmf)
{
	bmf.seekg(34);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取目标设备的分辨率(X方向)
函数参数:
			bmf		写入文件流结构
返回值:	X方向分辨率
**************************************************************/
long readBiXPixelsPerMeter(ifstream bmf)
{
	bmf.seekg(38);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((long)*(bmfhBuf+3)<<24)+((long)*(bmfhBuf+2)<<16)
		+((long)*(bmfhBuf+1)<<8)+(long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取目标设备的分辨率(Y方向)
函数参数:
			bmf		写入文件流结构
返回值:	Y方向分辨率
**************************************************************/
long readBiYPixelsPerMeter(ifstream bmf)
{
	bmf.seekg(42);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((long)*(bmfhBuf+3)<<24)+((long)*(bmfhBuf+2)<<16)
		+((long)*(bmfhBuf+1)<<8)+(long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	获取图象中实际用到的颜色数
函数参数:
			bmf		写入文件流结构
返回值:	实际用到的颜色数,如果为0,表示和位深度指定的一致
**************************************************************/
unsigned long readBiClrUsed(ifstream bmf)
{
	bmf.seekg(46);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );		
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}
/*************************************************************
函数功能:	指定图象中相对重要的颜色数
函数参数:
			bmf		写入文件流结构
返回值:	返回值非0,指定图象中相对重要的颜色数
**************************************************************/
unsigned long readBiClrImportant(ifstream bmf)
{
	bmf.seekg(50);
	unsigned char bmfhBuf[4];
	for(int i=0;i<4; i++)
	{
		bmf.get( bmfhBuf[i] );
	}
	return ((unsigned long)*(bmfhBuf+3)<<24)+((unsigned long)*(bmfhBuf+2)<<16)
		+((unsigned long)*(bmfhBuf+1)<<8)+(unsigned long)*(bmfhBuf+0);	 
}

//以下函数用来获取图象的调色板红、绿、蓝分量
/*************************************************************
函数功能:	获取图象的调色板蓝色分量
函数参数:
			bmf		写入文件流结构
返回值:	蓝色分量
**************************************************************/
unsigned char readRgbBlue(ifstream bmf) 
{
	bmf.seekg(54);
	unsigned char bmfhBuf;
	bmf.get( bmfhBuf );		
	return bmfhBuf;
}
/*************************************************************
函数功能:	获取图象的调色板绿色分量
函数参数:
			bmf		写入文件流结构
返回值:	绿色分量
**************************************************************/
unsigned char readRgbGreen(ifstream bmf) 
{
	bmf.seekg(55);
	unsigned char bmfhBuf;
	bmf.get( bmfhBuf );		
	return bmfhBuf;
}
/*************************************************************
函数功能:	获取图象的调色板红色分量
函数参数:
			bmf		写入文件流结构
返回值:	红色分量
**************************************************************/
unsigned char readRgbRed(ifstream bmf) 
{
	bmf.seekg(56);
	unsigned char bmfhBuf;
	bmf.get( bmfhBuf );		
	return bmfhBuf;
}

⌨️ 快捷键说明

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