青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 126,  comments - 73,  trackbacks - 0
最近在做把視頻嵌入到dx中,其中視頻是以bmp格式傳輸?shù)?由于不是十分熟悉bmp的結(jié)構(gòu),所以
在用bmp的緩存塊填充紋理時走了些彎路.比如填充的時候把bmp數(shù)據(jù)按照RGB進行填充還有BMP數(shù)據(jù)是從左下到右上保存的.

網(wǎng)上找了找,發(fā)現(xiàn)下面這份資料比較合胃口:轉(zhuǎn)載之.

From:Sinlgerblog.mblogger.cn
==============================


說到圖片,位圖(
Bitmap)當然是最簡單的,它Windows顯示圖片的基本格式,其文件擴展名為*.BMP。在Windows下,任何各式的圖片文件(包括視頻播放)都要轉(zhuǎn)化為位圖個時候才能顯示出來,各種格式的圖片文件也都是在位圖格式的基礎(chǔ)上采用不同的壓縮算法生成的(Flash中使用了適量圖,是按相同顏色區(qū)域存儲的)。

一、下面我們來看看位圖文件(*.BMP)的格式。

位圖文件主要分為如下3個部分:

塊名稱

對應(yīng)Windows結(jié)構(gòu)體定義

大小(Byte

文件信息頭

BITMAPFILEHEADER

14

位圖信息頭

BITMAPINFOHEADER

40

RGB顏色陣列

BYTE*

由圖像長寬尺寸決定

1、?? 文件信息頭BITMAPFILEHEADER

結(jié)構(gòu)體定義如下:

typedef struct tagBITMAPFILEHEADER { /* bmfh */

UINT bfType;?
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;

} BITMAPFILEHEADER;

其中:

bfType

說明文件的類型,該值必需是0x4D42,也就是字符'BM'

bfSize

說明該位圖文件的大小,用字節(jié)為單位

bfReserved1

保留,必須設(shè)置為0

bfReserved2

保留,必須設(shè)置為0

bfOffBits

說明從文件頭開始到實際的圖象數(shù)據(jù)之間的字節(jié)的偏移量。這個參數(shù)是非常有用的,因為位圖信息頭和調(diào)色板的長度會根據(jù)不同情況而變化,所以你可以用這個偏移值迅速的從文件中讀取到位數(shù)據(jù)。

2、位圖信息頭BITMAPINFOHEADER

結(jié)構(gòu)體定義如下:

typedef struct tagBITMAPINFOHEADER { /* bmih */

DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;

} BITMAPINFOHEADER;

其中:

biSize

說明BITMAPINFOHEADER結(jié)構(gòu)所需要的字數(shù)。

biWidth

說明圖象的寬度,以象素為單位。

biHeight

說明圖象的高度,以象素為單位。注:這個值除了用于描述圖像的高度之外,它還有另一個用處,就是指明該圖像是倒向的位圖,還是正向的位圖。如果該值是一個正數(shù),說明圖像是倒向的,如果該值是一個負數(shù),則說明圖像是正向的。大多數(shù)的BMP文件都是倒向的位圖,也就是時,高度值是一個正數(shù)。

biPlanes

為目標設(shè)備說明位面數(shù),其值將總是被設(shè)為1

biBitCount

說明比特數(shù)/象素,其值為1481624、或32。但是由于我們平時用到的圖像絕大部分是24位和32位的,所以我們討論這兩類圖像。

biCompression

說明圖象數(shù)據(jù)壓縮的類型,同樣我們只討論沒有壓縮的類型:BI_RGB

biSizeImage

說明圖象的大小,以字節(jié)為單位。當用BI_RGB格式時,可設(shè)置為0

biXPelsPerMeter

說明水平分辨率,用象素/米表示。

biYPelsPerMeter

說明垂直分辨率,用象素/米表示。

biClrUsed

說明位圖實際使用的彩色表中的顏色索引數(shù)(設(shè)為0的話,則說明使用所有調(diào)色板項)。

biClrImportant

說明對圖象顯示有重要影響的顏色索引的數(shù)目,如果是0,表示都重要。

3、RGB顏色陣列

有關(guān)RGB三色空間我想大家都很熟悉,這里我想說的是在Windows下,RGB顏色陣列存儲的格式其實BGR。也就是說,對于24位的RGB位圖像素數(shù)據(jù)格式是:

藍色B

綠色G

紅色R

對于32位的RGB位圖像素數(shù)據(jù)格式是:

藍色B

綠色G

紅色R

透明通道A

透明通道也稱Alpha通道,該值是該像素點的透明屬性,取值在0(全透明)到255(不透明)之間。對于24位的圖像來說,因為沒有Alpha通道,故整個圖像都不透明。

二、搞清了文件格式,下一步我們要實現(xiàn)加載。

??????????? 加載文件的目的是要得到圖片屬性,以及RGB數(shù)據(jù),然后可以將其繪制在DC(GDI),或是生成紋理對象(3D:OpenGL/Direct3D)。這兩種用途在數(shù)據(jù)處理上有點區(qū)別,我們主要按前一種用法講,在和3D有不同的地方,我們再提出來。

1、加載文件頭

??????????? //Load the file header

??????????? BITMAPFILEHEADER header;

??????????? memset(&header, 0, sizeof(header));

??????????? inf.read((char*)&header, sizeof(header));

??????????? if(header.bfType != 0x4D42)

??????????????????????? return false;

??????????? 這個很簡單,沒有什么好說的。

??????????? 2、加載位圖信息頭

??????????? //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;

??????????? 這里我們得到了3各重要的圖形屬性:寬,高,以及每個像素顏色所占用的位數(shù)。

3、行對齊

由于Windows在進行行掃描的時候最小的單位為4個字節(jié),所以當

圖片寬 X 每個像素的字節(jié)數(shù)= 4的整數(shù)倍

時要在每行的后面補上缺少的字節(jié),以0填充(一般來說當圖像寬度為2的冪時不需要對齊)。位圖文件里的數(shù)據(jù)在寫入的時候已經(jīng)進行了行對齊,也就是說加載的時候不需要再做行對齊。但是這樣一來圖片數(shù)據(jù)的長度就不是:寬 X X 每個像素的字節(jié)數(shù)? 了,我們需要通過下面的方法計算正確的數(shù)據(jù)長度:

//Calculate the image data size

int iLineByteCnt = (((m_iImageWidth*m_iBitsPerPixel) + 31) >> 5) << 2;

m_iImageDataSize = iLineByteCnt * m_iImageHeight;

4、加載圖片數(shù)據(jù)

對于24位和32位的位圖文件,位圖數(shù)據(jù)的偏移量為sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER),也就是說現(xiàn)在我們可以直接讀取圖像數(shù)據(jù)了。

??????????? if(m_pImageData) delete []m_pImageData;

??????????? m_pImageData = new unsigned char[m_iImageDataSize];

??????????? inf.read((char*)m_pImageData, m_iImageDataSize);

如果你足夠細心,就會發(fā)現(xiàn)內(nèi)存m_pImageData里的數(shù)據(jù)的確是BGR格式,可以用個純藍色或者是純紅色的圖片測試一下。

5、繪制

好了,數(shù)據(jù)和屬性我們都有了,現(xiàn)在就可以拿來隨便用了,就和吃饅頭一樣,愛粘白糖粘白糖,愛粘紅糖粘紅糖。下面是我的GDI繪制代碼,僅作參考。

void CImage::DrawImage(HDC hdc, int iLeft, int iTop, int iWidth, int iHeight)

{

??????????? if(!hdc || m_pImageData == NULL)

??????????????????????? return;

??????????? BITMAPINFO bmi;

??????????? memset(&bmi, 0, sizeof(bmi));

??????????? bmi.bmiHeader.biSize = sizeof(BITMAPINFO);

??????????? bmi.bmiHeader.biWidth = m_iImageWidth;

??????????? bmi.bmiHeader.biHeight = m_iImageHeight;

??????????? bmi.bmiHeader.biPlanes = 1;

??????????? bmi.bmiHeader.biBitCount = m_iBitsPerPixel;

??????????? bmi.bmiHeader.biCompression = BI_RGB;

??????????? bmi.bmiHeader.biSizeImage = m_iImageDataSize;

??????????? StretchDIBits(hdc, iLeft, iTop, iWidth, iHeight,

??????????????????????????????????????????????? 0, 0, m_iImageWidth, m_iImageHeight,

??????????????????????????????????????????????? m_pImageData, &bmi, DIB_RGB_COLORS, SRCCOPY);

}

6、3D(DX)的不同之處

如果你是想用剛才我們得到的數(shù)據(jù)生成紋理對象,那么你還要請出下面的問題。

首先,用來生成紋理的數(shù)據(jù)不需要對齊,也就是說不能在每行的后面加上對齊的字節(jié)。當然在DX里要求紋理圖片的尺寸為2的冪,所以這個問題實際上不存在;

其次,我們得到的圖形數(shù)據(jù)格式是BGR(BGRA),所以在生成紋理的時候,需需要做BGR->RGB(BGRA->RGBA)的轉(zhuǎn)化。

==============

posted on 2008-09-04 17:11 我風 閱讀(1196) 評論(1)  編輯 收藏 引用

FeedBack:
# re: BMP填充紋理
2010-11-03 10:31 | LEAN
哈哈..非常感謝...解決俺的一個大問題...  回復(fù)  更多評論
  

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

文章檔案

相冊

收藏夾

C++

MyFavorite

搜索

  •  

積分與排名

  • 積分 - 328996
  • 排名 - 75

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩午夜精品视频| 国产精品激情av在线播放| 免费国产自线拍一欧美视频| 午夜精品婷婷| 亚洲欧美日韩国产一区二区三区| 一区二区三区日韩欧美| 一区二区欧美国产| 亚洲欧美激情四射在线日 | 亚洲欧洲一区| 亚洲日韩第九十九页| 一本大道久久精品懂色aⅴ| 亚洲一区中文| 久久婷婷影院| 亚洲乱码国产乱码精品精可以看| 亚洲一区二区av电影| 久久不射网站| 欧美精品综合| 国产精品美女主播| 在线观看一区| 亚洲一区二区三| 久久亚洲综合| 一区二区三区精品视频| 久久九九久精品国产免费直播| 欧美二区不卡| 国产欧美精品一区aⅴ影院| 亚洲国产精品国自产拍av秋霞 | 久久精品一区二区三区不卡| 美女久久一区| 亚洲高清不卡av| 欧美在线视频不卡| 欧美成人有码| 亚洲一区三区电影在线观看| 美女视频一区免费观看| 国产精品永久免费观看| 亚洲精品小视频在线观看| 欧美一级免费视频| 亚洲经典自拍| 久久久久久综合| 欧美在线观看网站| 亚洲裸体视频| 免费国产自线拍一欧美视频| 国产精品自在在线| 中文成人激情娱乐网| 欧美成人亚洲成人| 欧美在线视频在线播放完整版免费观看| 欧美激情精品久久久久久| 国精品一区二区| 亚洲欧美另类国产| 亚洲另类在线视频| 欧美激情第10页| 亚洲第一在线| 麻豆精品视频| 久久久精品一品道一区| 国产精品一区二区在线观看网站| 一个人看的www久久| 亚洲国产一区二区三区青草影视| 久久久久久日产精品| 国产一区二区精品久久| 欧美伊人久久久久久久久影院 | 欧美一级一区| 亚洲午夜精品一区二区| 欧美视频日韩视频| 亚洲午夜羞羞片| 亚洲视频axxx| 国产精品美女一区二区在线观看| 午夜精品久久久久久久久| 亚洲婷婷综合色高清在线| 欧美视频一区二区三区在线观看| 宅男精品视频| 亚洲性色视频| 国产视频一区二区在线观看| 久久精品女人天堂| 久久久久久夜精品精品免费| 亚洲国产激情| 亚洲精品国产无天堂网2021| 欧美日韩精品免费观看视一区二区 | 亚洲福利视频免费观看| 欧美国产精品v| 欧美大片国产精品| 亚洲午夜一区二区三区| 亚洲一级高清| 亚洲一区图片| 国语自产精品视频在线看一大j8 | 中文一区在线| 国产婷婷97碰碰久久人人蜜臀| 久久精品30| 老司机久久99久久精品播放免费| 99国内精品久久久久久久软件| 一区二区日韩精品| 国产一区二区三区直播精品电影| 免费高清在线一区| 欧美日韩国产一区二区三区地区| 亚洲免费网址| 久久精品亚洲一区二区三区浴池| 亚洲破处大片| 亚洲性色视频| 亚洲精品视频中文字幕| 亚洲欧美福利一区二区| 亚洲人成网站色ww在线| 亚洲欧美国产一区二区三区| 亚洲片在线资源| 午夜视频在线观看一区| 亚洲人成网站在线观看播放| 亚洲视频精选| 亚洲人成在线观看| 亚久久调教视频| 一区二区三区成人| 久久久噜噜噜久久中文字免| 亚洲欧美另类在线观看| 欧美高清一区二区| 久久这里只有| 国产精品久久看| 亚洲国产清纯| 樱花yy私人影院亚洲| 亚洲综合电影| 亚洲资源av| 欧美日本乱大交xxxxx| 麻豆精品在线观看| 国产在线乱码一区二区三区| 在线视频精品一| 亚洲精品久久久久中文字幕欢迎你| 欧美一区二区三区在线免费观看| 亚洲与欧洲av电影| 欧美日韩久久不卡| 91久久国产精品91久久性色| 亚洲福利在线观看| 久久久久久综合网天天| 久久免费观看视频| 国产一区二区三区免费观看 | 欧美国产在线观看| 欧美r片在线| 在线免费观看欧美| 久久国产精品一区二区| 欧美中在线观看| 国产麻豆成人精品| 亚洲免费在线观看视频| 亚洲欧美国产日韩天堂区| 国产精品chinese| 一本久道久久综合狠狠爱| 亚洲美女电影在线| 亚洲精品一区二区三区av| 亚洲国产日韩欧美| 欧美成人自拍| 亚洲美女电影在线| 一区二区国产在线观看| 欧美视频在线观看| 亚洲最新在线| 亚洲欧美综合网| 国产日韩精品久久久| 欧美亚洲视频在线观看| 久久综合伊人77777蜜臀| 伊伊综合在线| 欧美日产一区二区三区在线观看| 亚洲精品少妇30p| 亚洲午夜91| 国产欧美日韩精品在线| 久久久国产91| 最新国产成人av网站网址麻豆| 夜夜嗨av一区二区三区| 国产精品国产馆在线真实露脸| 亚洲欧美国产高清| 免费的成人av| 亚洲制服av| 韩国av一区二区三区| 久久嫩草精品久久久精品一| 亚洲激情视频在线播放| 亚洲视频中文字幕| 国产日韩欧美二区| 麻豆成人精品| 国产精品99久久久久久久久久久久| 欧美与黑人午夜性猛交久久久| 在线观看视频一区二区| 欧美日韩免费高清| 欧美与欧洲交xxxx免费观看| 亚洲国产精品va| 欧美在线播放一区| 亚洲人屁股眼子交8| 国产精品美女久久久久久久| 久久天天躁夜夜躁狠狠躁2022| 一本久道久久综合中文字幕| 男女视频一区二区| 亚洲欧美资源在线| 亚洲精品一区在线| 国产一区二区毛片| 欧美日韩免费高清| 免费影视亚洲| 久久国产福利国产秒拍| 一区二区高清在线| 亚洲高清在线观看一区| 久久精品人人| 亚洲自拍都市欧美小说| 亚洲精品国精品久久99热| 国产无一区二区| 欧美午夜在线| 欧美巨乳在线观看| 美女国产一区| 久久久精品日韩| 亚洲欧美精品中文字幕在线| 亚洲欧洲日韩女同| 欧美成人一区二区在线|