位**件主要分為3部分:1. 檔案資訊頭 14byte
2. 位圖資訊頭 40byte
3. rgb顏色陣列 由影象長寬尺寸決定
1. 檔案資訊頭
定義結構體:
typedef struct tagbitmapfileheader bitmapfileheader;
bftype:必須是0x4d42
bfsize: 位**件的大小
bfreserved1:保留成員1,必須為0
bfreserved2:保留成員2,必須為0
bfoffbits:從檔案頭開始到實際的點陣圖資料之間的偏移量
2. 位圖資訊頭
定義結構體:
typedef struct tagbitmapinfoheader bitmapinfoheader;
bisize:結構體大小,以字為單位(4位元組),4位元組對齊
biwidth: 影象寬度,以畫素為單位
biheight:影象高度,以畫素為單位。大於0,影象是倒向的;小於0,影象是正向的。大多數為倒向的。就是說影象資料是從影象的左下腳的畫素開始一行一行的儲存的。
biplanes:總是為1
bibitcount:每畫素所佔的位元數(位數),一般為24或32位
bicompression:影象資料壓縮型別,討論沒有壓縮的型別:bi_rgb
bisizeimage:說明影象的大小,以位元組為單位。為bi_rgb型別時可以設定為0
bixpelspermeter:水平解析度,以畫素/公尺表示
biypelspermeter:垂直解析度,以畫素/公尺表示
biclrused:說明位圖實際使用的調色盤中的索引數,為0就是使用所有的索引數
biclrimportant:說明對影象顯示有重要影響的索引數,為0就是都重要
3. rgb顏色陣列
windows下rgb顏色陣列實際上是以bgr格式來儲存的,24位就是從高位到低位每個位元組儲存的顏色資料依次是bgr,32位的rgb點陣圖從高位到低位依次是bgr以及最低乙個位元組位影象透明度
4. 載入檔案頭
//load the file header
bitmapfileheader header;
memset(&header, 0, sizeof(header));
inf.read((char*)&header, sizeof(header));
if(header.bftype != 0x4d42)
return false;
5. 載入位圖資訊
//load the image information header
bitmapinfoheader infoheader;
memset(&infoheader, 0, sizeof(infoheader));
inf.read((char*)&infoheader, sizeof(infoheader));
m_iimagewidth = infoheader.biwidth;
m_iimageheight = infoheader.biheight;
m_ibitsperpixel = infoheader.bibitcount;
6. 行對齊
載入得到的點陣圖資訊的每個畫素是4位元組對齊的,如果影象的畫素不是4位元組對齊,會自動在位後面補零,湊成4位元組對齊。
這樣影象資料的長度就是:
//calculate the image data size
int ilinebytecnt = (((m_iimagewidth*m_ibitsperpixel) + 31) >> 5) << 2;
m_iimagedatasize = ilinebytecnt * m_iimageheight;
Android 儲存bitmap到相簿
安卓原生的儲存相簿方法可以用但是可調引數很少,對三星這樣的手機支援不好,的建立時間一般為1970.1.1,可以通過複寫android原生的方法來新增相關引數,比如 建立時間和gps位置資訊什麼的 下面是儲存到相簿用的函式 insert an image and create a thumbnail ...
電子相簿特效
初入前端這行不久,對很多東西還是很陌生,頁面布局 合理使用html標籤 css屬性 js書寫習慣等等還都不是很熟悉,所以看到感興趣的東西就想看看原始碼,看看實現原理,用來學習。前幾天看到tattoo寫的乙個jquery版結婚電子請帖,對首頁的相簿效果感興趣,所以把原始碼開啟看了兩遍,自己再敲了一遍。...
電子相簿系統(八)驗證使用者是否可用
我們的系統要求使用者名稱不能有重複的,所以使用者可以通過單擊 驗證使用者名稱是否可用 來驗證資訊。這裡也採用非同步請求的。如圖所示。學習了前面的相關知識之後,我想這個功能就不會很難了。這裡一樣的,也是通過我們業務層來查詢資料庫,然後對於不同的查詢結果做出不同的資訊反饋。1 jquery的檔案中,定義...