freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

vc圖象處理教程-展示頁

2025-01-17 07:45本頁面
  

【正文】 LEHEADER結(jié)構(gòu)從文件中讀出,填寫到 bf中 _lread(hf,(LPSTR)amp。 if((hf=_lopen(BmpFileName,OF_READ))==HFILE_ERROR){ MessageBox(hWnd,File c:\\ not found!,Error Message, MB_OK|MB_ICONEXCLAMATION)。 //實際的圖象數(shù)據(jù)占用的字節(jié)數(shù) //實際用到的顏色數(shù) ,即調(diào)色板數(shù)組中的顏色個數(shù) DWORD NumColors。 //存儲調(diào)色板的局部內(nèi)存句柄 DWORD LineBytes。 //用來保存設(shè)備中原來的調(diào)色板 HDC hDc。 //指向邏輯調(diào)色板結(jié)構(gòu)的指針 LPRGBQUAD lpRGB。 //文件句柄 //指向 BITMAPINFOHEADER結(jié)構(gòu)的指針 LPBITMAPINFOHEADER lpImgData。 BITMAPINFOHEADER bi。當(dāng)函數(shù)成功時,返回 TRUE,否則返回 FALSE。這兩個變量將在處理WM_PAINT 消息時用到,用來顯示位圖。 顯示一個 bmp 文件的 C 程序 下面的函數(shù) LoadBmpFile ,其功能是從一個 .bmp 文件中讀取數(shù)據(jù) ( 包括BITMAPINFOHEADER,調(diào)色板和實際圖象數(shù)據(jù) ),將其存儲在一個全局內(nèi)存句柄 hImgData中,這個 hImgData將在以后的圖象處理程序中用到。也就是說,從文件中最先讀到的是圖象最下 面一行的左邊第一個象素,然后是左邊第二個象素 …… 接下來是倒數(shù)第二行左邊第一個象素,左邊第二個象素 …… 依次類推 ,最后得到的是最上面一行的最右一個象素。這在前面介紹 biSizeImage時已經(jīng)提到了。 對于真彩色圖,三個字節(jié)才能表示 1個象素,哇,好費(fèi)空間呀!沒辦法,誰叫你想讓圖的顏色顯得更亮麗呢,有得必有失嘛。 對于 16色位圖,用 4位可以表示一個象素的顏色,所以一個字節(jié)可以表示 2個象素。下面針對 2色、 16色、 256色位圖和真彩色位圖分別介紹。對于用到調(diào)色板的位圖,圖象數(shù)據(jù)就是該象素顏在調(diào)色板中的索引值。 //保留值 } RGBQUAD。 //該顏色的綠色分量 BYTE rgbRed。數(shù)組中每個元素的類型是一個 RGBQUAD結(jié)構(gòu),占 4個字節(jié),其定義如下: typedef struct tagRGBQUAD { BYTE rgbBlue。有些位圖,如真彩色圖,前面已經(jīng)講過,是不需要調(diào)色板的, BITMAPINFOHEADER 后直接是位圖數(shù)據(jù)。 biClrImportant 指定本圖象中重要的顏色數(shù),如果該值為零,則認(rèn)為所有的顏色都是重要的。 biYPelsPerMeter 指定目標(biāo)設(shè)備的垂直分辨率,單位同上。舉個例子,如果 biWidth=240,則biWidth’=240;如果 biWidth=241, biWidth’=244)。我們今后所討論的只有第一種不壓縮的情況,即 biCompression為 BI_RGB的情況。 biCompression 指定位圖是否壓縮,有效的值為 BI_RGB, BI_RLE8, BI_RLE4, BI_BITFIELDS(都是一些Windows定義好的常量 )。 biPlanes 必須是 1,不用考慮。 biWidth 指定圖象的寬度,單位是象素。 } BITMAPINFOHEADER。 DWORD biClrUsed。 LONG biXPelsPerMeter。 WORD biBitCount DWORD biCompression。 LONG biHeight。 第二部分為位圖信息頭 BITMAPINFOHEADER,也是一個結(jié)構(gòu),其定義如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize。 bfSize 指定文件大小,包括這 14個字節(jié)。 } BITMAPFILEHEADER。 WORD bfReserved2。 DWORD bfSize。 bmp文件大體上分成四個部分,如圖 。所以真彩色圖直接用 R、G、 B三個分量表示,它又叫做 24位色圖。表示真彩色圖時,每個象素直接用 R、 G、 B三個分量字節(jié)表示,而不采用調(diào)色板技術(shù)。 有一種圖,它的顏色數(shù)高達(dá) 256256256種,也就是說包含我們上述提到的 R、 G、 B顏色表示方法中所有的顏色,這種圖叫做真彩色圖 (true color)。其實不光是 Windows位圖,許多圖象文件格式如 pcx、 tif、 gif等都用到了。整個圖象要用 200200,約 20k字節(jié),再加上表占用的字節(jié)為 316=48字節(jié) .整個占用的字節(jié)數(shù)約為前面的 1/6,省很多吧? 這張 R、 G、 B的表,就是我們常說的調(diào)色板 (Palette),另一種叫法是顏色查找表 LUT(Look Up Table),似乎更確切一些。舉個例子,如果表的第 0 行為 255, 0, 0(紅色 ),那么當(dāng)某個象素為紅色時,只需要標(biāo)明 0即可。 因為是一個 16色圖,也就是說這幅圖中最多只有 16種顏色,我們可以用一個表:表中的每一行記錄一種顏色的 R、 G、 B值。因為每個分量有 256 個級別,要用 8 位 (bit),即一個字節(jié) (byte)來表示,所以每個象素需要用 3 個字節(jié)。 讓我們來看看下面的例子。 表 常見顏色的 RGB組合值 顏色 R G B 紅 255 0 0 藍(lán) 0 255 0 綠 0 0 255 黃 255 255 0 紫 255 0 255 青 0 255 255 白 255 255 255 黑 0 0 0 灰 128 128 128 你大概已經(jīng)明白了,當(dāng)一幅圖中每個象素賦予不同的 RGB值時,能呈現(xiàn)出五彩繽紛的顏色了,這樣就形成了彩色圖。 這樣,根據(jù)紅、綠、藍(lán)各種不同的組合我們就能表示出 256256256,約 1600 萬種顏色。同樣,綠色和藍(lán)色也被分成 256級。有的顏色含有紅色成分多一些,如深紅;有的含有紅色成 分少一些,如淺紅。 圖 骷髏 圖 放大后的骷髏位圖 那么,彩色圖是怎么回事呢? 我們先來說說三元色 RGB概念。舉個例子,圖 是一幅普通的黑白位圖,圖 大后的圖,圖中每個方格代表了一個象素。 我們稱這種顯示器為位映象設(shè)備。為了防止閃爍,每秒要重復(fù)上述過程幾十次。 我們知道,普通的顯示器屏幕是由許許多多點(diǎn)構(gòu)成的,我們稱之為象素。第 1 章 Windows 位圖和調(diào)色板 位圖和調(diào)色板的概念 如今 Windows( 95, 98, NT)系列已經(jīng)成為絕大多數(shù)用戶使用的操作系統(tǒng),它比 DOS成功的一個重要因素是它可視化的漂亮界面。那么 Windows 是如何顯示圖象的呢?這就要談到位圖 (bitmap)。顯示時采用掃描的方法:電子槍每次從左到右掃描一行,為每個象素著色,然后從上到下這樣掃描若干行,就掃過了一屏。例如我們常說的屏幕分辨率為640480,刷新頻率為 70Hz,意思是說每行要掃描 640個象素,一共有 480行,每秒重復(fù)掃描屏幕 70次。所謂位映象,就是指一個二維的象素矩陣,而位圖就是采用位映象方法顯示和存儲的圖象。我們可以看到:整個骷髏就是由這樣一些黑點(diǎn)和白點(diǎn)組成的。 我們知道,自然界中的所有顏色都可以由紅、綠、藍(lán) (R, G, B)組合而成。針對含有紅色成分的多少,可以分成 0到 255共 256個等級, 0級表示不含紅色成分; 255級表示含有 100%的紅色成分。這種分級概念稱為量化。這么多顏色對于我們?nèi)搜蹃碚f已經(jīng)足夠豐富了。的確是這樣的,但實際上的做法還有些差別。 有一個長寬各為 200 個象素,顏色數(shù)為 16 色的彩色圖,每一個象素都用 R、 G、 B 三個分量表示。整個圖象要用 2002003,約 120k 字 節(jié),可不是一個小數(shù)目呀!如果我們用下面的方法,就能省的多。這樣當(dāng)我們表示一個象素的顏色時,只需要指出該顏色是在第幾行,即該顏色在表中的索引值。 讓我們再來計算一下: 16種狀態(tài)可以用 4位 (bit)表示,所以一個象素要用半個字節(jié)。 Windows 位圖中便用到了調(diào)色板技術(shù)。所以很好地掌握調(diào)色板的概念是十分有用的。真彩色圖并不是說一幅圖包含了所有的顏色,而是說它具有顯示所有顏色的能力,即最多可以包含所有的顏色。原因很明顯:如果用調(diào)色板,表示一個象素也要用 24 位,這是因為每種顏色的索引要用 24 位 (因為總共有 224種顏色,即調(diào)色板有 224行 ),和直接用 R, G, B 三個分量表示用的字節(jié)數(shù)一樣,不但沒有任何便宜,還要加上一個 2562562563個字節(jié)的大調(diào)色板。 bmp 文件 格式 介紹完位圖和調(diào)色板的概念,下面就讓我們來看一看 Windows 的位圖文件 (.bmp 文件 )的格式是什么樣子的。 位圖文件頭 BITMAPFILEHEADER 位圖信息頭 BITMAPINFOHEADER 調(diào)色板 Palette 實際的位圖數(shù)據(jù) ImageDate 圖 Windows位圖文件結(jié)構(gòu)示意圖 第一部分為位圖文件頭 BITMAPFILEHEADER,是一個結(jié)構(gòu),其定義如下: typedef struct tagBITMAPFILEHEADER { WORD bfType。 WORD bfReserved1。 DWORD bfOffBits。 這個結(jié)構(gòu)的長度是固定的,為 14個字節(jié) (WORD為無符號 16位整數(shù), DWORD為無符號 32位整數(shù) ),各個域的說明如下: bfType 指定文件類型,必須是 0x424D,即字符串“ BM”,也就是說所有 .bmp 文件的頭兩個字節(jié)都是“ BM” 。 bfReserved1, bfReserved2 為保留字,不用考慮 bfOffBits 為從文件頭到實際的位圖數(shù)據(jù)的偏移字節(jié)數(shù),即圖 。 LONG biWidth。 WORD biPlanes。 DWORD biSizeImage。 LONG biYPelsPerMeter。 DWORD biClrImportant。 這個結(jié)構(gòu)的長度是固定的,為 40個字節(jié) (LONG為 32位整數(shù) ),各個域的說明如下: biSize 指定這個結(jié)構(gòu)的長度,為 40。 biHeight 指定圖象的高度,單位是象素。 biBitCount 指定表示顏色時要用到的位數(shù),常用的值為 1(黑白二色圖 ), 4(16色圖 ), 8(256色 ), 24(真彩色圖 )(新的 .bmp格式支持 32位色,這里就不做討論了 )。要說明的是, Windows位圖可以采用 RLE4,和 RLE8的壓縮格式,但用的不多。 biSizeImage 指定實際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實也可以從以下的公式中計算出來: biSizeImage=biWidth’ biHeight 要注意的是:上述公式中的 biWidth’必須是 4的整倍數(shù) (所以不是 biWidth,而是 biWidth’,表示大于或等于 biWidth 的,最接近 4 的整倍數(shù)。 如果 biCompression為 BI_RGB,則該項可能為零 biXPelsPerMeter 指定目標(biāo)設(shè)備的水平分辨率,單位是每米的象素個數(shù),關(guān)于分辨率的概念,我們將在第 4章詳細(xì)介紹。 biClrUsed 指定本圖象實際用到的顏色數(shù),如果該值為零,則用到的顏色數(shù)為 2biBitCount。 第三部分為調(diào)色板 Palette,當(dāng)然,這里是對那些需要調(diào)色板的位圖文件而言的。 調(diào)色板實際上是一個數(shù)組,共有 biClrUsed 個元素 (如果該值為零,則有 2biBitCount個元素 )。 //該顏色的藍(lán)色分量 BYTE rgbGreen。 //該顏色的紅色分量 BYTE rgbReserved。 第四部分就是實際的圖象數(shù)據(jù)了。對于真彩色圖,圖象數(shù)據(jù)就是實際的 R、 G、 B值。 對于 2色位圖,用 1 位就可以表示該象素的顏色 (一般 0 表示黑, 1表示 白 ),所以一個字節(jié)可以表示 8個象素。 對于 256色位圖,一個字節(jié)剛好可以表示 1個象素。 要注意兩點(diǎn): (1) 每一行的字節(jié)數(shù)必須是 4的整倍數(shù),如果不是,則需要補(bǔ)齊。 (2) 一般來說, .bMP 文件的數(shù)據(jù)從下到上,從左到右的。 好了,終于介紹完 bmp 文件結(jié)構(gòu)了,是不是覺得頭有些大?別著急,對照著下面的程序,你就會很清楚了 (我最愛看源程序了,呵呵 )。同時填寫一個類型為 HBITMAP 的全局變量 hBitmap 和一個類型為 HPALETTE 的全局變量 hPalette。該函數(shù)的兩個參數(shù)分別是用來顯示位圖的窗口句柄,和 .bmp文件名 (全路徑 )。 B
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1