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

正文內容

vc++圖象處理教程-全文預覽

2025-01-29 07:45 上一頁面

下一頁面
  

【正文】 pImgData為指向原來位圖數(shù)據(jù)的指針 lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData)。 //OffBits為 BITMAPINFOHEADER結構長度加調色板的大小 OffBits=(BITMAPFILEHEADER)。 int i。 int RectWidth,RectHeight。 LPBITMAPINFOHEADER lpTempImgData。 DWORD OffBits,BufSize。利用 memcpy函數(shù),從 (x0,y0)點開始,一次可以拷貝一整行 (寬度為 x1- x0),然后將內 存指針移到 (x0,y0+1)處,拷貝下一行。容易看出,圖象區(qū)域的 x范圍從 0到 width|tx|,對應原圖的范圍從 |tx|到 width; 圖 tx≤ 0, ty≤ 0的情況 (3) 0 tx width:如圖 。 如果想得到一幅灰度圖,可以使用 Sea或者 PhotoShop等軟件提供的顏色轉換功能將彩色圖轉換成灰度圖。如果是彩色的 256色圖,由于圖象處理后有可能會產生不屬于這 256種顏色的新顏色,就更麻煩了;這一點,今后你就會有深刻體會的。你現(xiàn)在該明白我前面所說不是巧合的原因了吧。這就提示我們:如果在對 YUV信號進行量化時,可以“偏心”一點,讓 Y的量化級別多一些 (誰讓它重要呢? )而讓 UV的量化級別少一些,就可以實現(xiàn)圖象信息的壓縮。當同時考慮 U, V分量時,就能夠表示出彩色信息來。 在表示顏色的方法中,除了 RGB 外,還有一種叫 YUV 的表示方法,應用也很多。也就是說 RGB值從 (0,0, 0), (1, 1, 1)一直到 (255, 255, 255)。因此,要表示灰度圖,就需要把亮度值進行量化。 下面的函數(shù) Translation 采用的是第一種做法,即移出的部分被截斷。這種處理,文件大小不會改變。那么到底新圖中的左上角點對應原圖中的哪一點呢?將左上角點的坐標 (0,0)入公式 (),得到 x0=tx , y0=ty;所以新圖中的 (0,0)點的顏色和原圖中 (tx , ty)的一樣。 如圖 所示,初始坐標為 (x0,y0)的點經過平移 (tx,ty)(以向右,向下為正方向 )后,坐標變?yōu)?x1,y1)。 好了,運行 ,欣賞一下你今天的勞動成果。首先編譯資源文件,輸入 rc ,將生成 件,接著輸入 cl ,就生成 了。d:\msdev\MFC\INCLUDE。C:\WIN95。%LIB% set VcOsDir= 只要把上面的“ d:\MSDEV”改成你自己的 VC 目錄就可以了。%PATH% set INCLUDE=%MSDevDir%\INCLUDE。 在安裝完 Visual C++時,在 bin目錄下會產生一個 ,它的作用是在命令行編譯時設置正確的環(huán)境變量,如存放頭文件的 INCLUDE目錄,存放庫文件的 LIB目錄等。另外,為了節(jié)省篇幅, .bmp文件名被固定為 c:\,可以自己加入打開文件對話框,任意選擇你要顯示的文件。不過,當一幅漂亮的 bmp 圖顯示在屏幕上時,你還是會興奮地大叫“ Yeah!”,至少當年我是這樣。還可以是反色,擦除,做 “與”運算等操作,具體細節(jié)見 VC++幫助。 SelectObject函數(shù)將與設備無關的位圖選入內存設備上下文中。 } //釋放屏幕設備上下文 EndPaint(hwnd, amp。 RealizePalette (hDC)。ps)。 產生的邏輯調 色板句柄 hPalette和位圖句柄 hBitmap 要在處理 WM_PAINT消息時使用,這樣才能在屏幕上顯示出來,處理過程如下面的程序。 上面提到了設備上下文,相信編過 Windows 程序的讀者對它并不陌生,這里再簡單介紹一下。 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT, (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS)。 //成功返回 } 對上面的程序要說明兩點: (1) 對于需要調色板的圖,要想正確地顯示,必須根據(jù) bmp 文件,產生邏輯調色板。 RealizePalette(hDc)。 } //產生位圖句柄 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT, (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS)。 LocalFree(hPal)。 pPalpalPalEntry[i].peFlags=(BYTE)0。 i NumColors。 //填寫邏輯調色板結構的頭 pPalpalNumEntries = NumColors。 //將文件內容讀入 lpImgData _hread(hf,(char *)lpImgData,(long)sizeof(BITMAPINFOHEADER) +(long)NumColors*sizeof(RGBQUAD)+ImgSize)。 _lclose(hf)。 _lclose(hf)。 MessageBox(hWnd,Invalid color numbers!,Error Message, MB_OK|MB_ICONEXCLAMATION)。 break。 break。 //ImgSize為實際的圖象數(shù)據(jù)占用的字節(jié)數(shù) ImgSize=(DWORD)LineBytes*。 //我們定義了一個宏 define WIDTHBYTES(i) ((i+31)/32*4)上面曾經 //提到過,每一行的字節(jié)數(shù)必須是 4的整倍數(shù),只要調用 //WIDTHBYTES(*)就能完成這一換算。 //打開文件錯誤,返回 } //將 BITMAPFILEHEADER結構從文件中讀出,填寫到 bf中 _lread(hf,(LPSTR)amp。 //實際的圖象數(shù)據(jù)占用的字節(jié)數(shù) //實際用到的顏色數(shù) ,即調色板數(shù)組中的顏色個數(shù) DWORD NumColors。 //用來保存設備中原來的調色板 HDC hDc。 //文件句柄 //指向 BITMAPINFOHEADER結構的指針 LPBITMAPINFOHEADER lpImgData。當函數(shù)成功時,返回 TRUE,否則返回 FALSE。 顯示一個 bmp 文件的 C 程序 下面的函數(shù) LoadBmpFile ,其功能是從一個 .bmp 文件中讀取數(shù)據(jù) ( 包括BITMAPINFOHEADER,調色板和實際圖象數(shù)據(jù) ),將其存儲在一個全局內存句柄 hImgData中,這個 hImgData將在以后的圖象處理程序中用到。這在前面介紹 biSizeImage時已經提到了。 對于 16色位圖,用 4位可以表示一個象素的顏色,所以一個字節(jié)可以表示 2個象素。對于用到調色板的位圖,圖象數(shù)據(jù)就是該象素顏在調色板中的索引值。 //該顏色的綠色分量 BYTE rgbRed。有些位圖,如真彩色圖,前面已經講過,是不需要調色板的, BITMAPINFOHEADER 后直接是位圖數(shù)據(jù)。 biYPelsPerMeter 指定目標設備的垂直分辨率,單位同上。我們今后所討論的只有第一種不壓縮的情況,即 biCompression為 BI_RGB的情況。 biPlanes 必須是 1,不用考慮。 } BITMAPINFOHEADER。 LONG biXPelsPerMeter。 LONG biHeight。 bfSize 指定文件大小,包括這 14個字節(jié)。 WORD bfReserved2。 bmp文件大體上分成四個部分,如圖 。表示真彩色圖時,每個象素直接用 R、 G、 B三個分量字節(jié)表示,而不采用調色板技術。其實不光是 Windows位圖,許多圖象文件格式如 pcx、 tif、 gif等都用到了。舉個例子,如果表的第 0 行為 255, 0, 0(紅色 ),那么當某個象素為紅色時,只需要標明 0即可。因為每個分量有 256 個級別,要用 8 位 (bit),即一個字節(jié) (byte)來表示,所以每個象素需要用 3 個字節(jié)。 表 常見顏色的 RGB組合值 顏色 R G B 紅 255 0 0 藍 0 255 0 綠 0 0 255 黃 255 255 0 紫 255 0 255 青 0 255 255 白 255 255 255 黑 0 0 0 灰 128 128 128 你大概已經明白了,當一幅圖中每個象素賦予不同的 RGB值時,能呈現(xiàn)出五彩繽紛的顏色了,這樣就形成了彩色圖。同樣,綠色和藍色也被分成 256級。 圖 骷髏 圖 放大后的骷髏位圖 那么,彩色圖是怎么回事呢? 我們先來說說三元色 RGB概念。 我們稱這種顯示器為位映象設備。 我們知道,普通的顯示器屏幕是由許許多多點構成的,我們稱之為象素。那么 Windows 是如何顯示圖象的呢?這就要談到位圖 (bitmap)。例如我們常說的屏幕分辨率為640480,刷新頻率為 70Hz,意思是說每行要掃描 640個象素,一共有 480行,每秒重復掃描屏幕 70次。我們可以看到:整個骷髏就是由這樣一些黑點和白點組成的。針對含有紅色成分的多少,可以分成 0到 255共 256個等級, 0級表示不含紅色成分; 255級表示含有 100%的紅色成分。這么多顏色對于我們人眼來說已經足夠豐富了。 有一個長寬各為 200 個象素,顏色數(shù)為 16 色的彩色圖,每一個象素都用 R、 G、 B 三個分量表示。這樣當我們表示一個象素的顏色時,只需要指出該顏色是在第幾行,即該顏色在表中的索引值。 Windows 位圖中便用到了調色板技術。真彩色圖并不是說一幅圖包含了所有的顏色,而是說它具有顯示所有顏色的能力,即最多可以包含所有的顏色。 bmp 文件 格式 介紹完位圖和調色板的概念,下面就讓我們來看一看 Windows 的位圖文件 (.bmp 文件 )的格式是什么樣子的。 WORD bfReserved1。 這個結構的長度是固定的,為 14個字節(jié) (WORD為無符號 16位整數(shù), DWORD為無符號 32位整數(shù) ),各個域的說明如下: bfType 指定文件類型,必須是 0x424D,即字符串“ BM”,也就是說所有 .bmp 文件的頭兩個字節(jié)都是“ BM” 。 LONG biWidth。 DWORD biSizeImage。 DWORD biClrImportant。 biHeight 指定圖象的高度,單位是象素。要說明的是, Windows位圖可以采用 RLE4,和 RLE8的壓縮格式,但用的不多。 如果 biCompression為 BI_RGB,則該項可能為零 biXPelsPerMeter 指定目標設備的水平分辨率,單位是每米的象素個數(shù),關于分辨率的概念,我們將在第 4章詳細介紹。 第三部分為調色板 Palette,當然,這里是對那些需要調色板的位圖文件而言的。 //該顏色的藍色分量 BYTE rgbGreen。 第四部分就是實際的圖象數(shù)據(jù)了。 對于 2色位圖,用 1 位就可以表示該象素的顏色 (一般 0 表示黑, 1表示 白 ),所以一個字節(jié)可以表示 8個象素。 要注意兩點: (1) 每一行的字節(jié)數(shù)必須是 4的整倍數(shù),如果不是,則需要補齊。 好了,終于介紹完 bmp 文件結構了,是不是覺得頭有些大?別著急,對照著下面的程序,你就會很清楚了 (我最愛看源程序了,呵呵 )。該函數(shù)的兩個參數(shù)分別是用來顯示位圖的窗口句柄,和 .bmp文件名 (全路徑 )。 BOOL LoadBmpFile (HWND hWnd,char *BmpFileName) { HFILE hf。 //指向 RGBQUAD結構的指針 HPALETTE hPrevPalette。 //每一行的字節(jié)數(shù) DWORD ImgSize。 return FALSE。bi,sizeof(B
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1