熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A
本文主要介紹如何將處理后的位圖數(shù)據(jù)從內(nèi)存保存到磁盤。
位圖文件主要有4部分組成:
1. 文件頭信息
2. 位圖頭信息
3. 調(diào)色板 ,在1、8、16位色中存在調(diào)試板;在24和32位色中無調(diào)色板,直接使用像素各通道的值混合成像素顏色。
4. 位圖的數(shù)據(jù)
將位圖寫入磁盤文件也就是依次將文件頭信息、位圖頭信息和位圖數(shù)據(jù),寫到磁盤。由于在24和32位真色彩下,
不需要調(diào)色板,這里不對調(diào)色板進(jìn)行處理。
1. 填充文件頭
在Window中結(jié)構(gòu)體BITMAPFILEHEADER代表著文件頭信息,在文件頭信息中有以下三個字段比較重要:
1. byType,文件類型,必須為0x4D42(BM),表示是位圖文件。
2. bfSize,文件的大小,也就是文件頭信息、位圖頭信息和位圖數(shù)據(jù)在一起的大小。
3. bfOffBits,偏移量,位圖數(shù)據(jù)相對于文件頭的便宜量。
文件頭信息的填充如下:
BITMAPFILEHEADER fileHeader;
fileHeader.bfType = 0x4d42; // BM
fileHeader.bfReserved1 = 0;
fileHeader.bfReserved2 = 0 ;
fileHeader.bfSize = width * height * depth + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) ;
其中,depth是像素深度也就是每個像素所占用的字節(jié)數(shù)(24位是3,32位為4)。bfReserved1和bfReserved2是保留字段,填充為0.
2. 填充位圖頭信息
位圖頭信息包含了位圖的長寬、顏色格式等信息,其對應(yīng)的結(jié)構(gòu)體為BITMAPINFOHEADER,其重要的字段如下:
1. biBitCount 每個像素所占用的位數(shù)
2. biCompression 壓縮方法,對于位圖文件一般設(shè)置為0,不壓縮。
3. width、height位圖的寬和高
4. biSizeImage 位圖數(shù)據(jù)的大小 width * height *biBitCount / 8
具體的填充如下:
BITMAPINFOHEADER infoHeader;
infoHeader.biBitCount = depth * 8;
infoHeader.biClrImportant = 0;
infoHeader.biClrUsed = 0;
infoHeader.biCompression = 0 ;
infoHeader.biHeight = height;
infoHeader.biWidth = width;
infoHeader.biPlanes = 1;
infoHeader.biSize = sizeof(BITMAPINFOHEADER);
infoHeader.biSizeImage = width * height * depth;
infoHeader.biXPelsPerMeter = 3779;
infoHeader.biYPelsPerMeter = 3779;
3. 寫文件到磁盤
填充后各部分信息后,依次寫入到磁盤即可。
if(file.Open(filePath,CFile::modeCreate | CFile::modeWrite))
{
file.Write(&fileHeader,sizeof(BITMAPFILEHEADER));
file.Write(&infoHeader,sizeof(BITMAPINFOHEADER));
file.Write(imageBuffer,width * height * depth);
file.Close();
return true;
}
了解位圖的存儲格式后,將位圖保存到磁盤還是挺簡單的,這里是基于Windows SDK的實現(xiàn),有機(jī)會要自己定義各部分的結(jié)構(gòu)體,實現(xiàn)位圖文件的讀寫。
熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A