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

正文內(nèi)容

vc圖象處理教程-wenkub

2023-01-23 07:45:52 本頁(yè)面
 

【正文】 t個(gè)元素 )。 biClrUsed 指定本圖象實(shí)際用到的顏色數(shù),如果該值為零,則用到的顏色數(shù)為 2biBitCount。 biSizeImage 指定實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實(shí)也可以從以下的公式中計(jì)算出來(lái): biSizeImage=biWidth’ biHeight 要注意的是:上述公式中的 biWidth’必須是 4的整倍數(shù) (所以不是 biWidth,而是 biWidth’,表示大于或等于 biWidth 的,最接近 4 的整倍數(shù)。 biBitCount 指定表示顏色時(shí)要用到的位數(shù),常用的值為 1(黑白二色圖 ), 4(16色圖 ), 8(256色 ), 24(真彩色圖 )(新的 .bmp格式支持 32位色,這里就不做討論了 )。 這個(gè)結(jié)構(gòu)的長(zhǎng)度是固定的,為 40個(gè)字節(jié) (LONG為 32位整數(shù) ),各個(gè)域的說(shuō)明如下: biSize 指定這個(gè)結(jié)構(gòu)的長(zhǎng)度,為 40。 LONG biYPelsPerMeter。 WORD biPlanes。 bfReserved1, bfReserved2 為保留字,不用考慮 bfOffBits 為從文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù),即圖 。 DWORD bfOffBits。 位圖文件頭 BITMAPFILEHEADER 位圖信息頭 BITMAPINFOHEADER 調(diào)色板 Palette 實(shí)際的位圖數(shù)據(jù) ImageDate 圖 Windows位圖文件結(jié)構(gòu)示意圖 第一部分為位圖文件頭 BITMAPFILEHEADER,是一個(gè)結(jié)構(gòu),其定義如下: typedef struct tagBITMAPFILEHEADER { WORD bfType。原因很明顯:如果用調(diào)色板,表示一個(gè)象素也要用 24 位,這是因?yàn)槊糠N顏色的索引要用 24 位 (因?yàn)榭偣灿?224種顏色,即調(diào)色板有 224行 ),和直接用 R, G, B 三個(gè)分量表示用的字節(jié)數(shù)一樣,不但沒(méi)有任何便宜,還要加上一個(gè) 2562562563個(gè)字節(jié)的大調(diào)色板。所以很好地掌握調(diào)色板的概念是十分有用的。 讓我們?cè)賮?lái)計(jì)算一下: 16種狀態(tài)可以用 4位 (bit)表示,所以一個(gè)象素要用半個(gè)字節(jié)。整個(gè)圖象要用 2002003,約 120k 字 節(jié),可不是一個(gè)小數(shù)目呀!如果我們用下面的方法,就能省的多。的確是這樣的,但實(shí)際上的做法還有些差別。這種分級(jí)概念稱(chēng)為量化。 我們知道,自然界中的所有顏色都可以由紅、綠、藍(lán) (R, G, B)組合而成。所謂位映象,就是指一個(gè)二維的象素矩陣,而位圖就是采用位映象方法顯示和存儲(chǔ)的圖象。顯示時(shí)采用掃描的方法:電子槍每次從左到右掃描一行,為每個(gè)象素著色,然后從上到下這樣掃描若干行,就掃過(guò)了一屏。第 1 章 Windows 位圖和調(diào)色板 位圖和調(diào)色板的概念 如今 Windows( 95, 98, NT)系列已經(jīng)成為絕大多數(shù)用戶使用的操作系統(tǒng),它比 DOS成功的一個(gè)重要因素是它可視化的漂亮界面。為了防止閃爍,每秒要重復(fù)上述過(guò)程幾十次。舉個(gè)例子,圖 是一幅普通的黑白位圖,圖 大后的圖,圖中每個(gè)方格代表了一個(gè)象素。有的顏色含有紅色成分多一些,如深紅;有的含有紅色成 分少一些,如淺紅。 這樣,根據(jù)紅、綠、藍(lán)各種不同的組合我們就能表示出 256256256,約 1600 萬(wàn)種顏色。 讓我們來(lái)看看下面的例子。 因?yàn)槭且粋€(gè) 16色圖,也就是說(shuō)這幅圖中最多只有 16種顏色,我們可以用一個(gè)表:表中的每一行記錄一種顏色的 R、 G、 B值。整個(gè)圖象要用 200200,約 20k字節(jié),再加上表占用的字節(jié)為 316=48字節(jié) .整個(gè)占用的字節(jié)數(shù)約為前面的 1/6,省很多吧? 這張 R、 G、 B的表,就是我們常說(shuō)的調(diào)色板 (Palette),另一種叫法是顏色查找表 LUT(Look Up Table),似乎更確切一些。 有一種圖,它的顏色數(shù)高達(dá) 256256256種,也就是說(shuō)包含我們上述提到的 R、 G、 B顏色表示方法中所有的顏色,這種圖叫做真彩色圖 (true color)。所以真彩色圖直接用 R、G、 B三個(gè)分量表示,它又叫做 24位色圖。 DWORD bfSize。 } BITMAPFILEHEADER。 第二部分為位圖信息頭 BITMAPINFOHEADER,也是一個(gè)結(jié)構(gòu),其定義如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize。 WORD biBitCount DWORD biCompression。 DWORD biClrUsed。 biWidth 指定圖象的寬度,單位是象素。 biCompression 指定位圖是否壓縮,有效的值為 BI_RGB, BI_RLE8, BI_RLE4, BI_BITFIELDS(都是一些Windows定義好的常量 )。舉個(gè)例子,如果 biWidth=240,則biWidth’=240;如果 biWidth=241, biWidth’=244)。 biClrImportant 指定本圖象中重要的顏色數(shù),如果該值為零,則認(rèn)為所有的顏色都是重要的。數(shù)組中每個(gè)元素的類(lèi)型是一個(gè) RGBQUAD結(jié)構(gòu),占 4個(gè)字節(jié),其定義如下: typedef struct tagRGBQUAD { BYTE rgbBlue。 //保留值 } RGBQUAD。下面針對(duì) 2色、 16色、 256色位圖和真彩色位圖分別介紹。 對(duì)于真彩色圖,三個(gè)字節(jié)才能表示 1個(gè)象素,哇,好費(fèi)空間呀!沒(méi)辦法,誰(shuí)叫你想讓圖的顏色顯得更亮麗呢,有得必有失嘛。也就是說(shuō),從文件中最先讀到的是圖象最下 面一行的左邊第一個(gè)象素,然后是左邊第二個(gè)象素 …… 接下來(lái)是倒數(shù)第二行左邊第一個(gè)象素,左邊第二個(gè)象素 …… 依次類(lèi)推 ,最后得到的是最上面一行的最右一個(gè)象素。這兩個(gè)變量將在處理WM_PAINT 消息時(shí)用到,用來(lái)顯示位圖。 BITMAPINFOHEADER bi。 //指向邏輯調(diào)色板結(jié)構(gòu)的指針 LPRGBQUAD lpRGB。 //存儲(chǔ)調(diào)色板的局部?jī)?nèi)存句柄 DWORD LineBytes。 if((hf=_lopen(BmpFileName,OF_READ))==HFILE_ERROR){ MessageBox(hWnd,File c:\\ not found!,Error Message, MB_OK|MB_ICONEXCLAMATION)。 //將 BITMAPINFOHEADER結(jié)構(gòu)從文件中讀出,填寫(xiě)到 bi中 _lread(hf,(LPSTR)amp。 //再舉一個(gè) 256色的例子,如果圖象寬是 31,則每一行需要 31個(gè)字節(jié)存 //儲(chǔ),因?yàn)樽止?jié)數(shù)必須是 4的整倍數(shù),所以應(yīng)該是 32,而此時(shí)的 //biWidth=31,biBitCount=8,WIDTHBYTES(31*8)=32,我們?cè)O(shè)想的一樣。 else //否則,用到的顏色數(shù)為 2biBitCount。 break。 //對(duì)于真彩色圖,沒(méi)用到調(diào)色板 break。 return FALSE。 //關(guān)閉文件,返回 FALSE } =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD)+ImgSize。 //關(guān)閉文件,返回 FALSE } //指針 lpImgData指向該內(nèi)存區(qū) lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData)。 //關(guān)閉文件 if(NumColors!=0) //NumColors不為零,說(shuō)明用到了調(diào)色板 { //為邏輯調(diào)色板分配局部?jī)?nèi)存,大小為邏輯調(diào)色板結(jié)構(gòu)長(zhǎng)度加 //NumColors個(gè) PALETTENTRY hPal=LocalAlloc(LHND,sizeof(LOGPALETTE)+ NumColors* sizeof(PALETTEENTRY))。 //lpRGB指向的是調(diào)色板開(kāi)始的位置 lpRGB = (LPRGBQUAD)((LPSTR)lpImgData + (DWORD)sizeof(BITMAPINFOHEADER))。 pPalpalPalEntry[i].peGreen=lpRGBrgbGreen。 //指針移到下一項(xiàng) } //產(chǎn)生邏輯調(diào)色板, hPalette是一個(gè)全局變量 hPalette=CreatePalette(pPal)。 if(hPalette) //如果剛才產(chǎn)生了邏輯調(diào)色板 { //將新的邏輯調(diào)色板選入 DC,將舊的邏輯調(diào)色板句柄保存在 //hPrevPalette hPrevPalette=SelectPalette(hDc,hPalette,FALSE)。amp。 //釋放設(shè)備上下文 GlobalUnlock(hImgData)。 pPalpalVersion = 0x300;③從文件中讀取調(diào)色板的 RGB 值,填寫(xiě)到每一項(xiàng)中;④產(chǎn)生邏輯調(diào)色板:hPalette=CreatePalette(pPal)。該函數(shù)的第一項(xiàng)參數(shù)為設(shè)備上下文句柄。所謂設(shè)備上下文就是指這個(gè)數(shù)據(jù)結(jié)構(gòu)。 PAINTSTRUCT ps。 //建立一個(gè)內(nèi)存設(shè)備上下文 if (hPalette) //有調(diào)色板 { //將調(diào)色板選入屏幕設(shè)備上下文 SelectPalette (hDC, hPalette, FALSE)。 //顯示位圖 BitBlt(hDC, 0, 0, , , hMemDC, 0, 0, SRCCOPY)。 break。由于所有操作都是在內(nèi)存中進(jìn)行, 所以速度很快。 哇,終于講完了。特別要注意的是,退出時(shí),別忘了釋放內(nèi)存和資源,這是每個(gè)程序員應(yīng)該養(yǎng)成的習(xí)慣。 圖 運(yùn)行時(shí)的畫(huà)面 最后,再介紹一個(gè)命令行編譯的竅門(mén)。 echo off set MSDevDir=d:\MSDEV set VcOsDir=WIN95 set PATH=%MSDevDir%\BIN。 %INCLUDE% set LIB=%MSDevDir%\LIB。如下所示: PATH=D:\MSDEV\BIN。C:\WIN95\SYSTEM。d:\msdev\MFC\LIB。 有時(shí)命令行編譯會(huì)出現(xiàn)“ Out of enviroment space”的錯(cuò)誤 ,那是因?yàn)?始環(huán)境變量?jī)?nèi)存太小,首先執(zhí)行 mand /e:2048 (或更大 )命令即可解決改問(wèn)題。如果你熟悉矩陣運(yùn)算,你將發(fā)現(xiàn),實(shí)現(xiàn)這些變換是非常容易的。 圖 平移的示意圖 以矩陣的形式表示為 () 我們更關(guān)心的是它的逆變換: () 這是因?yàn)椋何覀兿胫赖氖瞧揭坪蟮膱D象中每個(gè)象素的顏色。 另一個(gè)問(wèn)題是:平移后的圖象是否要放大?一種做法是不放大,移出的部分被截?cái)唷? 圖 移動(dòng)后圖象被放大 這種處理,文件大小要改變。 如果你用過(guò) Photoshop,Corel PhotoPaint等圖象處理軟件,可能聽(tīng)說(shuō)過(guò)“灰度圖” (grayscale)這個(gè)詞。 .bmp 格式的文件中,并沒(méi)有灰度圖這個(gè)概念,但是,我們可以很容易在 .bmp 文件中表示灰度圖。這樣,灰度圖就可以用 256色圖來(lái)表示了。 在這種表示方法中, Y分量的物理含義就是亮度, U 和 V 分量代表了色差信號(hào) (你不必了解什么是色差,只要知道有這么一個(gè)概念就可以了 )。 (2) 人眼對(duì)于亮度信號(hào)非常敏感,而對(duì)色差信號(hào)的敏感程度相對(duì)較弱。而 RGB的表示方法就做不到這一點(diǎn),因?yàn)?RGB 三個(gè)分量同等重要 ,缺了誰(shuí)也不行。首先 RGB的值都一樣;其次,圖象數(shù)據(jù)即調(diào)色板索引值,也就是實(shí)際的 RGB值,也就是亮度值;另外,因?yàn)槭?256色調(diào)色板,所以圖象數(shù)據(jù)中一個(gè)字節(jié)代表一個(gè)象素,很整齊。為了將重點(diǎn)放在算法本身上, 今后給出的程序如不做特殊說(shuō)明,都是針對(duì) 256 級(jí)灰度圖的。算法的思想是先將所有區(qū)域填成白色,然后找平移后顯示區(qū)域的左上角點(diǎn) (x0,y0) 和右下角點(diǎn) (x1,y1) ,分幾種情況進(jìn)行處理。 y方向是對(duì)應(yīng)的 (height表示圖象的高度 ): (1) ty≤ height,圖象 完全移出了屏幕,不用做任何處理; (2) heightty≤ 0,圖象區(qū)域的 y范圍從 0到 height|ty|,對(duì)應(yīng)原圖的范圍從 |ty|到 height; (3) 0tyheight ,圖象區(qū)域的 y范圍從 ty到 height,對(duì)應(yīng)原圖的范圍從 0到 heightty; (4) ty≥ height,圖象完全移出了屏幕,不用做任何處理。Translation的源代碼如下: int xOffset=0,yOffset=0。 LPSTR lpPtr。 int SrcX0,SrcY0,SrcX1,SrcY1。 HDC
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1