RGB565与RGB555位图文件格式的标志识别
? ? ? ?最近從一張本地的16位位圖讀取像素顏色數(shù)據(jù),并填充到ANDROID的BITMAP的數(shù)據(jù)中,發(fā)現(xiàn)使用CAVAS顯示到界面時(shí),圖片顯示顏色不對(duì),找了很多資料,原來(lái)發(fā)現(xiàn)是兩個(gè)原因:
? ? ? ? ?1.將位圖的顏色分量掩碼弄錯(cuò)了,當(dāng)BITMAPINFOHEADER.biCompression是BI_BITFIELDS,此時(shí)位圖才為565格式的位圖,掩碼存放在原來(lái)調(diào)色板的位置,而當(dāng)前讀取的這張位圖BITMAPINFOHEADER.biCompression是BI_RGB,此時(shí)位圖應(yīng)該為555的位圖,所以掩碼應(yīng)該采用RGB555的掩碼數(shù)據(jù)。
? ? ? ? 2.在把RGB555的位圖顏色數(shù)據(jù) 轉(zhuǎn)換為RGB888的數(shù)據(jù)時(shí),首先將位圖的數(shù)據(jù)像素值與顏色分量掩碼進(jìn)行與運(yùn)算,然后由于RGB555是對(duì)顏色數(shù)據(jù)進(jìn)行了有損的壓縮編碼,只剩下了5位數(shù)據(jù),而當(dāng)轉(zhuǎn)換為8位的原始數(shù)據(jù)時(shí),必須要進(jìn)行數(shù)據(jù)補(bǔ)償,可以默認(rèn)使用0進(jìn)行不足的位數(shù)補(bǔ)償,以達(dá)到8位的原始顏色分量長(zhǎng)度,也有種說(shuō)法,是采用5位數(shù)據(jù)的低幾位進(jìn)行數(shù)據(jù)填充,據(jù)說(shuō)效果更好,失真更少。
biBitCount=16 表示位圖最多有216種顏色。每個(gè)色素用16位(2個(gè)字節(jié))表示。這種格式叫作高彩色,或叫增強(qiáng)型16位色,或64K色。它的情況比較復(fù)雜,當(dāng)biCompression成員的值是BI_RGB時(shí),它沒(méi)有調(diào)色板。16位中,最低的5位表示藍(lán)色分量,中間的5位表示綠色分量,高的5位表示紅色分量,一共占用了15位,最高的一位保留,設(shè)為0。這種格式也被稱作555 16位位圖。如果biCompression成員的值是BI_BITFIELDS,那么情況就復(fù)雜了,首先是原來(lái)調(diào)色板的位置被三個(gè)DWORD變量占據(jù),稱為紅、綠、藍(lán)掩碼。分別用于描述紅、綠、藍(lán)分量在16位中所占的位置。在Windows 95(或98)中,系統(tǒng)可接受兩種格式的位域:555和565,在555格式下,紅、綠、藍(lán)的掩碼分別是:0x7C00、0x03E0、0x001F,而在565格式下,它們則分別為:0xF800、0x07E0、0x001F。你在讀取一個(gè)像素之后,可以分別用掩碼“與”上像素值,從而提取出想要的顏色分量(當(dāng)然還要再經(jīng)過(guò)適當(dāng)?shù)淖笥乙撇僮?#xff09;。在NT系統(tǒng)中,則沒(méi)有格式限制,只不過(guò)要求掩碼之間不能有重疊。(注:這種格式的圖像使用起來(lái)是比較麻煩的,不過(guò)因?yàn)樗娘@示效果接近于真彩,而圖像數(shù)據(jù)又比真彩圖像小的多,所以,它更多的被用于游戲軟件)。
總結(jié)
以上是生活随笔為你收集整理的RGB565与RGB555位图文件格式的标志识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows SOCKET编程
- 下一篇: WEB技术架构的资源链接。