📄 readorwritefile.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 + -