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

正文內容

vc圖象處理教程-文庫吧資料

2025-01-14 07:45本頁面
  

【正文】 APINFOHEADER結構長度加調色板的大小 OffBits=(BITMAPFILEHEADER)。 DialogBox (ghInst, INPUTBOX, hWnd, dlgInputBox)。 int i。 HDC hDc。 int RectWidth,RectHeight。 int SrcX0,SrcY0,SrcX1,SrcY1。 LPBITMAPINFOHEADER lpTempImgData。 LPSTR lpPtr。 DWORD OffBits,BufSize。Translation的源代碼如下: int xOffset=0,yOffset=0。利用 memcpy函數,從 (x0,y0)點開始,一次可以拷貝一整行 (寬度為 x1- x0),然后將內 存指針移到 (x0,y0+1)處,拷貝下一行。 y方向是對應的 (height表示圖象的高度 ): (1) ty≤ height,圖象 完全移出了屏幕,不用做任何處理; (2) heightty≤ 0,圖象區(qū)域的 y范圍從 0到 height|ty|,對應原圖的范圍從 |ty|到 height; (3) 0tyheight ,圖象區(qū)域的 y范圍從 ty到 height,對應原圖的范圍從 0到 heightty; (4) ty≥ height,圖象完全移出了屏幕,不用做任何處理。容易看出,圖象區(qū)域的 x范圍從 0到 width|tx|,對應原圖的范圍從 |tx|到 width; 圖 tx≤ 0, ty≤ 0的情況 (3) 0 tx width:如圖 。算法的思想是先將所有區(qū)域填成白色,然后找平移后顯示區(qū)域的左上角點 (x0,y0) 和右下角點 (x1,y1) ,分幾種情況進行處理。 如果想得到一幅灰度圖,可以使用 Sea或者 PhotoShop等軟件提供的顏色轉換功能將彩色圖轉換成灰度圖。為了將重點放在算法本身上, 今后給出的程序如不做特殊說明,都是針對 256 級灰度圖的。如果是彩色的 256色圖,由于圖象處理后有可能會產生不屬于這 256種顏色的新顏色,就更麻煩了;這一點,今后你就會有深刻體會的。首先 RGB的值都一樣;其次,圖象數據即調色板索引值,也就是實際的 RGB值,也就是亮度值;另外,因為是 256色調色板,所以圖象數據中一個字節(jié)代表一個象素,很整齊。你現(xiàn)在該明白我前面所說不是巧合的原因了吧。而 RGB的表示方法就做不到這一點,因為 RGB 三個分量同等重要 ,缺了誰也不行。這就提示我們:如果在對 YUV信號進行量化時,可以“偏心”一點,讓 Y的量化級別多一些 (誰讓它重要呢? )而讓 UV的量化級別少一些,就可以實現(xiàn)圖象信息的壓縮。 (2) 人眼對于亮度信號非常敏感,而對色差信號的敏感程度相對較弱。當同時考慮 U, V分量時,就能夠表示出彩色信息來。 在這種表示方法中, Y分量的物理含義就是亮度, U 和 V 分量代表了色差信號 (你不必了解什么是色差,只要知道有這么一個概念就可以了 )。 在表示顏色的方法中,除了 RGB 外,還有一種叫 YUV 的表示方法,應用也很多。這樣,灰度圖就可以用 256色圖來表示了。也就是說 RGB值從 (0,0, 0), (1, 1, 1)一直到 (255, 255, 255)。 .bmp 格式的文件中,并沒有灰度圖這個概念,但是,我們可以很容易在 .bmp 文件中表示灰度圖。因此,要表示灰度圖,就需要把亮度值進行量化。 如果你用過 Photoshop,Corel PhotoPaint等圖象處理軟件,可能聽說過“灰度圖” (grayscale)這個詞。 下面的函數 Translation 采用的是第一種做法,即移出的部分被截斷。 圖 移動后圖象被放大 這種處理,文件大小要改變。這種處理,文件大小不會改變。 另一個問題是:平移后的圖象是否要放大?一種做法是不放大,移出的部分被截斷。那么到底新圖中的左上角點對應原圖中的哪一點呢?將左上角點的坐標 (0,0)入公式 (),得到 x0=tx , y0=ty;所以新圖中的 (0,0)點的顏色和原圖中 (tx , ty)的一樣。 圖 平移的示意圖 以矩陣的形式表示為 () 我們更關心的是它的逆變換: () 這是因為:我們想知道的是平移后的圖象中每個象素的顏色。 如圖 所示,初始坐標為 (x0,y0)的點經過平移 (tx,ty)(以向右,向下為正方向 )后,坐標變?yōu)?x1,y1)。如果你熟悉矩陣運算,你將發(fā)現(xiàn),實現(xiàn)這些變換是非常容易的。 好了,運行 ,欣賞一下你今天的勞動成果。 有時命令行編譯會出現(xiàn)“ Out of enviroment space”的錯誤 ,那是因為 始環(huán)境變量內存太小,首先執(zhí)行 mand /e:2048 (或更大 )命令即可解決改問題。首先編譯資源文件,輸入 rc ,將生成 件,接著輸入 cl ,就生成 了。d:\msdev\MFC\LIB。d:\msdev\MFC\INCLUDE。C:\WIN95\SYSTEM。C:\WIN95。如下所示: PATH=D:\MSDEV\BIN。%LIB% set VcOsDir= 只要把上面的“ d:\MSDEV”改成你自己的 VC 目錄就可以了。 %INCLUDE% set LIB=%MSDevDir%\LIB。%PATH% set INCLUDE=%MSDevDir%\INCLUDE。 echo off set MSDevDir=d:\MSDEV set VcOsDir=WIN95 set PATH=%MSDevDir%\BIN。 在安裝完 Visual C++時,在 bin目錄下會產生一個 ,它的作用是在命令行編譯時設置正確的環(huán)境變量,如存放頭文件的 INCLUDE目錄,存放庫文件的 LIB目錄等。 圖 運行時的畫面 最后,再介紹一個命令行編譯的竅門。另外,為了節(jié)省篇幅, .bmp文件名被固定為 c:\,可以自己加入打開文件對話框,任意選擇你要顯示的文件。特別要注意的是,退出時,別忘了釋放內存和資源,這是每個程序員應該養(yǎng)成的習慣。不過,當一幅漂亮的 bmp 圖顯示在屏幕上時,你還是會興奮地大叫“ Yeah!”,至少當年我是這樣。 哇,終于講完了。還可以是反色,擦除,做 “與”運算等操作,具體細節(jié)見 VC++幫助。由于所有操作都是在內存中進行, 所以速度很快。 SelectObject函數將與設備無關的位圖選入內存設備上下文中。 break。 } //釋放屏幕設備上下文 EndPaint(hwnd, amp。 //顯示位圖 BitBlt(hDC, 0, 0, , , hMemDC, 0, 0, SRCCOPY)。 RealizePalette (hDC)。 //建立一個內存設備上下文 if (hPalette) //有調色板 { //將調色板選入屏幕設備上下文 SelectPalette (hDC, hPalette, FALSE)。ps)。 PAINTSTRUCT 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)。 pPalpalVersion = 0x300;③從文件中讀取調色板的 RGB 值,填寫到每一項中;④產生邏輯調色板:hPalette=CreatePalette(pPal)。 //成功返回 } 對上面的程序要說明兩點: (1) 對于需要調色板的圖,要想正確地顯示,必須根據 bmp 文件,產生邏輯調色板。 //釋放設備上下文 GlobalUnlock(hImgData)。 RealizePalette(hDc)。amp。 } //產生位圖句柄 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT, (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS)。 if(hPalette) //如果剛才產生了邏輯調色板 { //將新的邏輯調色板選入 DC,將舊的邏輯調色板句柄保存在 //hPrevPalette hPrevPalette=SelectPalette(hDc,hPalette,FALSE)。 LocalFree(hPal)。 //指針移到下一項 } //產生邏輯調色板, hPalette是一個全局變量 hPalette=CreatePalette(pPal)。 pPalpalPalEntry[i].peFlags=(BYTE)0。 pPalpalPalEntry[i].peGreen=lpRGBrgbGreen。 i NumColors。 //lpRGB指向的是調色板開始的位置 lpRGB = (LPRGBQUAD)((LPSTR)lpImgData + (DWORD)sizeof(BITMAPINFOHEADER))。 //填寫邏輯調色板結構的頭 pPalpalNumEntries = NumColors。 //關閉文件 if(NumColors!=0) //NumColors不為零,說明用到了調色板 { //為邏輯調色板分配局部內存,大小為邏輯調色板結構長度加 //NumColors個 PALETTENTRY hPal=LocalAlloc(LHND,sizeof(LOGPALETTE)+ NumColors* sizeof(PALETTEENTRY))。 //將文件內容讀入 lpImgData _hread(hf,(char *)lpImgData,(long)sizeof(BITMAPINFOHEADER) +(long)NumColors*sizeof(RGBQUAD)+ImgSize)。 //關閉文件,返回 FALSE } //指針 lpImgData指向該內存區(qū) lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData)。 _lclose(hf)。 //關閉文件,返回 FALSE } =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD)+ImgSize。 _lclose(hf)。 return FALSE。 MessageBox(hWnd,Invalid color numbers!,Error Message, MB_OK|MB_ICONEXCLAMATION)。 //對于真彩色圖,沒用到調色板 break。 break。 break。 break。 else //否則,用到的顏色數為 2biBitCount。 //ImgSize為實際的圖象數據占用的字節(jié)數 ImgSize=(DWORD)LineBytes*。 //再舉一個 256色的例子,如果圖象寬是 31,則每一行需要 31個字節(jié)存 //儲,因為字節(jié)數必須是 4的整倍數,所以應該是 32,而此時的 //biWidth=31,biBitCount=8,WIDTHBYTES(31*8)=32,我們設想的一樣。 //我們定義了一個宏 define WIDTHBYTES(i) ((i+31)/32*4)上面曾經 //提到過,每一行的字節(jié)數必須是 4的整倍數,只要調用 //WIDTHBYTES(*)就能完成這一換算。 //將 BITMAPINFOHEADER結構從文件中讀出,填寫到 bi中 _lread(hf,(LPSTR)amp。 //打開文件錯誤,返回 } //將 BITMAPFI
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1