?? readorwritefile.h
字號:
/*************************************************************
Filename: readOrWriteFile.h.
Writer: Dai Zhiheng.
Time: 2005-3-27.
**************************************************************/
/*************************************************************
函數(shù)功能: 獲取文件類型信息
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: =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);
}
/*************************************************************
函數(shù)功能: 獲取文件的長度(包含文件頭、信息頭、調(diào)色板、圖象數(shù)據(jù))
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 文件的長度
**************************************************************/
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);
}
/*************************************************************
函數(shù)功能: 獲取圖象數(shù)據(jù)相對于文件頭的偏移距離
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 圖象數(shù)據(jù)偏移量
**************************************************************/
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);
}
//以下函數(shù)用來獲取圖象文件的信息頭內(nèi)容
/*************************************************************
函數(shù)功能: 獲取信息頭長度
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 信息頭長度
**************************************************************/
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);
}
/*************************************************************
函數(shù)功能: 獲取DIB的寬度
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 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);
}
/*************************************************************
函數(shù)功能: 獲取DIB的高度
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 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);
}
/*************************************************************
函數(shù)功能: 獲取位面?zhèn)€數(shù)
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: =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);
}
/*************************************************************
函數(shù)功能: 獲取位深度
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值:
//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);
}
/*************************************************************
函數(shù)功能: 獲取圖象的壓縮格式
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 壓縮格式
**************************************************************/
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);
}
/*************************************************************
函數(shù)功能: 獲取位圖陣列的大小
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 位圖陣列大小
**************************************************************/
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);
}
/*************************************************************
函數(shù)功能: 獲取目標(biāo)設(shè)備的分辨率(X方向)
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 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);
}
/*************************************************************
函數(shù)功能: 獲取目標(biāo)設(shè)備的分辨率(Y方向)
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 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);
}
/*************************************************************
函數(shù)功能: 獲取圖象中實際用到的顏色數(shù)
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 實際用到的顏色數(shù),如果為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);
}
/*************************************************************
函數(shù)功能: 指定圖象中相對重要的顏色數(shù)
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 返回值非0,指定圖象中相對重要的顏色數(shù)
**************************************************************/
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);
}
//以下函數(shù)用來獲取圖象的調(diào)色板紅、綠、藍(lán)分量
/*************************************************************
函數(shù)功能: 獲取圖象的調(diào)色板藍(lán)色分量
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 藍(lán)色分量
**************************************************************/
unsigned char readRgbBlue(ifstream bmf)
{
bmf.seekg(54);
unsigned char bmfhBuf;
bmf.get( bmfhBuf );
return bmfhBuf;
}
/*************************************************************
函數(shù)功能: 獲取圖象的調(diào)色板綠色分量
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 綠色分量
**************************************************************/
unsigned char readRgbGreen(ifstream bmf)
{
bmf.seekg(55);
unsigned char bmfhBuf;
bmf.get( bmfhBuf );
return bmfhBuf;
}
/*************************************************************
函數(shù)功能: 獲取圖象的調(diào)色板紅色分量
函數(shù)參數(shù):
bmf 寫入文件流結(jié)構(gòu)
返回值: 紅色分量
**************************************************************/
unsigned char readRgbRed(ifstream bmf)
{
bmf.seekg(56);
unsigned char bmfhBuf;
bmf.get( bmfhBuf );
return bmfhBuf;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -