女人夜夜春高潮爽A∨片传媒_国产精品VIDEOS麻豆_在线精品亚洲一区二区三区_亚洲熟妇无码av

圖像處理
新聞詳情

位圖文件的保存

發布時間(jian):2021-01-14 16:38:07 最后更新:2021-01-15 11:26:01 瀏(liu)覽次(ci)數:3426

本文主要介紹如何將處理后的位圖數據從內存保存到磁盤。
位圖文件主要有(you)4部(bu)分組成:

1.   文件(jian)頭信息(xi)

2.   位圖頭信(xin)息

3.   調(diao)色(se)板 ,在1、8、16位(wei)色(se)中存在調(diao)試板;在24和32位(wei)色(se)中無(wu)調(diao)色(se)板,直接使用像素各通(tong)道的(de)值混合成像素顏色(se)。

4.    位圖的數據
將位圖寫入磁盤文件也就是依次將文件頭信息位圖頭信息位圖數據,寫到磁盤。由于在24和32位真色彩下,
不需要調(diao)色(se)板,這里(li)不對調(diao)色(se)板進行處理。

1. 填充文件頭

在Window中結(jie)構體(ti)BITMAPFILEHEADER代表(biao)著文(wen)件頭信(xin)息(xi),在文(wen)件頭信(xin)息(xi)中有以下(xia)三(san)個字(zi)段(duan)比較重要:

1.   byType,文件類型,必(bi)須為0x4D42(BM),表示是位圖(tu)文件。

2.   bfSize,文(wen)件的(de)(de)大(da)小(xiao),也(ye)就是文(wen)件頭信(xin)息(xi)、位圖頭信(xin)息(xi)和位圖數(shu)據在一(yi)起的(de)(de)大(da)小(xiao)。

3.    bfOffBits,偏移量,位圖數據相對于文件頭的便宜量。
文件頭信(xin)息的填(tian)充如下:

	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是(shi)像素深度也就是(shi)每個像素所占用(yong)的(de)字(zi)節數(24位(wei)是(shi)3,32位(wei)為4)。bfReserved1和bfReserved2是(shi)保留字(zi)段,填充為0.

2. 填充位圖頭信息

位圖頭信息包含了位圖的(de)(de)(de)長寬(kuan)、顏(yan)色格式(shi)等信息,其對應的(de)(de)(de)結構體為BITMAPINFOHEADER,其重要(yao)的(de)(de)(de)字段如(ru)下:

1.   biBitCount 每個像素所占(zhan)用的位數

2.   biCompression 壓(ya)縮方(fang)法,對于位圖文件一般設置(zhi)為(wei)0,不壓(ya)縮。

3.   width、height位圖(tu)的寬(kuan)和高

4.    biSizeImage 位圖數據的大小 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. 寫文件到磁盤

填充后(hou)各部分(fen)信息后(hou),依(yi)次寫(xie)入到(dao)磁盤即(ji)可。

	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;
	}

了解位(wei)圖的(de)(de)存儲格式后,將位(wei)圖保存到磁(ci)盤還(huan)是挺簡單的(de)(de),這(zhe)里(li)是基于Windows SDK的(de)(de)實現,有機(ji)會要(yao)自己定義各部分的(de)(de)結構體,實現位(wei)圖文件的(de)(de)讀寫(xie)。

在線客(ke)服
客服(fu)電話(hua)
  • 0755-23712116
  • 13310869691