Bitmap四種屬性

http://blog.csdn.net/rabbit_in_android/article/details/49967461android

Bitmap:數組

(1)     public Bitmap (int width,int height,int stride,     PixelFormat format,IntPtr scan0)ide

用指定的大小、像素格式和像素數據初始化 Bitmap 類的新實例。post

(2)     LockBits():,就是把圖像的內存區域根據格式鎖定,拿到那塊內存的首地址。這樣就能夠直接改寫這段內存了。這個方法的設計是挺好,惋惜都是C++做爲源泉來的,.NET Framework裏面根本就不推薦用指針,須要用Marshal.Copy把內容Copy到一個byte數組裏面,而後處理完了再Copy回去。.net

(3)     UnlockBits():從系統內存解鎖此 Bitmap。設計

 

BitmapData:位圖圖像的屬性指針

(1)   Height獲取或設置 Bitmap 對象的像素高度。有時也稱做掃描行數。orm

(2)   PixelFormat: 獲取或設置返回此 BitmapData 對象的 Bitmap 對象中像素信息的格式。對象

(3)   Reserved: 保留。不要使用。blog

(4)   Scan0: 獲取或設置位圖中第一個像素數據的地址。它也能夠當作是位圖中的第一個掃描行。

(5)   Stride: 獲取或設置 Bitmap 對象的跨距寬度(也稱爲掃描寬度)。

Stride:跨距是單行像素(一個掃描行)的寬度,舍入爲一個 4 字節的邊界。跨距老是大於或等於實際像素寬度。若是跨距爲正,則位圖自頂向下。若是跨距爲負,則位圖顛倒。Stride是指圖像每一行須要佔用的字節數。根據BMP格式的標準,Stride必定要是4的倍數。據個例子,一幅1024*768的24bppRgb的圖像,每行有效的像素信息應該是1024*3 = 3072。由於已是4的倍數,因此Stride就是3072。那麼若是這幅圖像是35*30,那麼一行的有效像素信息是105,可是105不是4的倍數,因此填充空字節,Stride應該是108。這一行計算出來的offset就是3。一要注意必須是4的倍數,二單位是字節!

(6)   Width: 獲取或設置 Bitmap 對象的像素寬度。這也能夠看做是一個掃描行中的像素數。

 

 

PixelFormat:

(1)     Format24bppRgb,也就是24位色。在這種格式下3個字節表示一種顏色,也就是咱們一般所知道的R,G,B,因此每一個字節表示顏色的一個份量。

(2)     Format32bppArgb,除了RGB,在圖像中還存在一個通道,叫作A。這個A就是用來描述當前像素是透明,半透明,仍是全透明的份量。這個通道是2個叫Catmull和Smith在上世紀70年代初發明的。經過這個份量,咱們能夠進行alpha混合的一些計算。從而使表面的圖像和背景圖像混合,從而形成透明半透明的效果。在這種格式下A做爲一個byte,取值能夠從0到255,那麼0表示圖像徹底透明,則徹底不可見,255則表示圖像徹底不透明。每一個像素均可以實現這種透明或者半透明的效果。更詳細解釋能夠參考http://en.wikipedia.org/wiki/Alpha_compositing,或者去買本數字圖像處理的書回來看。

(3)     Format32bppPArgb,這叫作premultiplied alpha,就是說在RGB份量裏面,alpha份量的數據已經被預先乘進去了。好比說,一個半透明的紅色點,在ARGB下,矢量是(255,0,0,128),而在PARGB下就變成了(128,0,0,128)。這是爲了避免要每次都作乘法。

(4)     Bitmap保存成爲一個文件,那麼必須用png格式,纔可以保存alpha通道的信息。若是你存爲JPG/BMP/GIF,那麼alpha通道的信息將會被丟失。若是存爲BMP,那麼文件格式將變成Format32bppRgb,其中1個字節再也不使用;若是保存爲JPEG,那麼是Format24bppRgb;存爲GIF,格式將變成Format8bppIndexed。根據標準,BMP/JPG原本就不支持透明通道,因此沒有可能保留透明信息。GIF卻是支持透明,可是GIF中顏色的信息都是索引,因此Alpha的解釋對GIF徹底沒有效果,

 

BitmapInfoHeader:

biHeight:說明圖象的高度,以象素爲單位。

    若是該值是一個正數,說明Btimap是Bottom up DIB,起始點是左下角,也就是從圖像的最下面一行掃描,位圖數組中獲得的第一行數據實際是圖形的最下面的一行。圖像是倒向的;

    若是該值是一個負數,則說明圖像是TopDown DIB,起始點是左上角,圖像從最上面一行掃描,圖像正向的。

   大多數的BMP文件都是倒向的位圖,也就是時,高度值是一個正數。(注:當高度值是一個負數時(正向圖像),圖像將不能被壓縮(也就是說biCompression成員將不能是BI_RLE8或BI_RLE4)

相關文章
相關標籤/搜索