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

正文內(nèi)容

vc圖象處理教程(編輯修改稿)

2025-02-04 07:45 本頁面
 

【文章內(nèi)容簡介】 BitBlt函數(shù)在內(nèi)存設(shè)備上下文和屏幕設(shè)備上下文中進(jìn)行位拷貝。由于所有操作都是在內(nèi)存中進(jìn)行, 所以速度很快。 BitBlt 函數(shù)的參數(shù)分別為: ,在上面的程序里,為屏幕設(shè)備上下文,如果改成打印設(shè)備上下文,就不是顯示位圖,而是打?。? x坐標(biāo); 3. 目標(biāo)矩形左上角點(diǎn) y 坐標(biāo),在上面的程序中, 2 和 3 為 (0, 0),表示顯示在窗口的左上角; 矩形的寬度; 5. 目標(biāo)矩形的高度; 6. 源設(shè)備上下文,在上面的程序里,為內(nèi)存設(shè)備上下文;7. 源矩形左上角點(diǎn) x坐標(biāo); 8. 源矩形左上角點(diǎn) y坐標(biāo); ,在這里為 SRCCOPY,表示直接將源矩形拷貝到目標(biāo)矩形。還可以是反色,擦除,做 “與”運(yùn)算等操作,具體細(xì)節(jié)見 VC++幫助。你可以試著改改第 9項(xiàng)參數(shù),就能體會(huì)到它們的含義了。 哇,終于講完了。是不是覺得有點(diǎn)枯燥?這一章是有點(diǎn)兒枯燥,特別是當(dāng)你對(duì) Windows 的編程并不清楚時(shí),就更覺得如此。不過,當(dāng)一幅漂亮的 bmp 圖顯示在屏幕上時(shí),你還是會(huì)興奮地大叫“ Yeah!”,至少當(dāng)年我是這樣。 在本書的附盤中包含所有的源程序,包括頭文件和資源文件和例圖。特別要注意的是,退出時(shí),別忘了釋放內(nèi)存和資源,這是每個(gè)程序員應(yīng)該養(yǎng)成的習(xí)慣。這些個(gè)程序并不是很完善,例如,如果一幅圖很大,屏 幕顯示不下怎么辦?你可以試著自己加上滾動(dòng)條。另外,為了節(jié)省篇幅, .bmp文件名被固定為 c:\,可以自己加入打開文件對(duì)話框,任意選擇你要顯示的文件。圖 。 圖 運(yùn)行時(shí)的畫面 最后,再介紹一個(gè)命令行編譯的竅門。為什么要用命令行編譯呢?主要有兩個(gè)好處:第一,不用進(jìn)入 IDE(集成開發(fā)環(huán)境 ),節(jié)省了時(shí)間,而且編譯速度也比較快;第二,對(duì)于簡單的程序,不用生成項(xiàng)目文件 .mdp 或 .mak,直接就能生成 .exe 文件,這一點(diǎn),在下面的例子中可以看到。 在安裝完 Visual C++時(shí),在 bin目錄下會(huì)產(chǎn)生一個(gè) ,它的作用是在命令行編譯時(shí)設(shè)置正確的環(huán)境變量,如存放頭文件的 INCLUDE目錄,存放庫文件的 LIB目錄等。如果你沒找到這個(gè)批處理文件,可以參考下面的例子,自己做一個(gè)批處理。 @echo off set MSDevDir=d:\MSDEV set VcOsDir=WIN95 set PATH=%MSDevDir%\BIN。%MSDevDir%\BIN\%VcOsDir%。%PATH% set INCLUDE=%MSDevDir%\INCLUDE。%MSDevDir%\MFC\INCLUDE。 %INCLUDE% set LIB=%MSDevDir%\LIB。%MSDevDir%\MFC\LIB。%LIB% set VcOsDir= 只要把上面的“ d:\MSDEV”改成你自己的 VC 目錄就可以了。在 DOS PROMPT 下執(zhí)行該批處理文件,執(zhí) 行 set命令,你就能看到新設(shè)置的環(huán)境變量了。如下所示: PATH=D:\MSDEV\BIN。D:\MSDEV\BIN\WIN95。C:\WIN95。C:\WIN95\COMMAND。C:\WIN95\SYSTEM。 INCLUDE=d:\msdev\INCLUDE。d:\msdev\MFC\INCLUDE。 LIB=d:\msdev\LIB。d:\msdev\MFC\LIB。 現(xiàn)在我們就可以進(jìn)行命令行編譯了。首先編譯資源文件,輸入 rc ,將生成 件,接著輸入 cl ,就生成 了??梢钥吹?,我們并沒有用到項(xiàng)目文件,所以,對(duì)于這種簡單的程序來說,使用命令行編譯還是非常方便的。 有時(shí)命令行編譯會(huì)出現(xiàn)“ Out of enviroment space”的錯(cuò)誤 ,那是因?yàn)?始環(huán)境變量內(nèi)存太小,首先執(zhí)行 mand /e:2048 (或更大 )命令即可解決改問題。 使用 ide的方法是: new project,類型是 win32 applicationempty project,然后把 .h,.rc,.c文件 add to project編譯即可。 好了,運(yùn)行 ,欣賞一下你今天的勞動(dòng)成果。 The University of Southern California does not screen or control the content on this website and thus does not guarantee the accuracy, integrity, or quality of such content. All content on this website is provided by and is the sole responsibility of the person from which such content originated, and such content does not necessarily reflect the opinions of the University administration or the Board of Trustees 第 2 章 圖象的幾何變換 這一章我們將介紹圖象的幾何變換,包括圖象的 平移、旋轉(zhuǎn)、鏡象變換、轉(zhuǎn)置、放縮等。如果你熟悉矩陣運(yùn)算,你將發(fā)現(xiàn),實(shí)現(xiàn)這些變換是非常容易的。 平移 平移 (translation)變換大概是幾何變換中最簡單的一種了。 如圖 所示,初始坐標(biāo)為 (x0,y0)的點(diǎn)經(jīng)過平移 (tx,ty)(以向右,向下為正方向 )后,坐標(biāo)變?yōu)?x1,y1)。這兩點(diǎn)之間的關(guān)系是 x1=x0+tx , y1=y0+ty。 圖 平移的示意圖 以矩陣的形式表示為 () 我們更關(guān)心的是它的逆變換: () 這是因?yàn)椋何覀兿胫赖氖瞧揭坪蟮膱D象中每個(gè)象素的顏色。例如我們想知道,新圖中左上角點(diǎn)的 RGB值是多少?很顯然,該點(diǎn)是原圖的某點(diǎn)經(jīng)過平移后得到的,這兩點(diǎn)的顏色肯定是一樣的,所以只要知道了原圖那點(diǎn)的 RGB值即可。那么到底新圖中的左上角點(diǎn)對(duì)應(yīng)原圖中的哪一點(diǎn)呢?將左上角點(diǎn)的坐標(biāo) (0,0)入公式 (),得到 x0=tx , y0=ty;所以新圖中的 (0,0)點(diǎn)的顏色和原圖中 (tx , ty)的一樣。 這樣就存在一個(gè)問題:如果新 圖中有一點(diǎn) (x1,y1),按照公式 ()得到的 (x0,y0)不在原圖中該怎么辦?通常的做法是,把該點(diǎn)的 RGB值統(tǒng)一設(shè)成 (0,0,0)或者 (255,255,255)。 另一個(gè)問題是:平移后的圖象是否要放大?一種做法是不放大,移出的部分被截?cái)?。例如,圖 ,圖 。這種處理,文件大小不會(huì)改變。 圖 移動(dòng)前的圖 圖 移動(dòng)后的圖 還有一種做法是:將圖象放大,使得能夠顯示下所有部分,如圖 。 圖 移動(dòng)后圖象被放大 這種處理,文件大小要改變。設(shè)原圖的寬和高分別是 w1,h1 則新圖的寬和高變?yōu)?w1+|tx|和h1+|ty|,加絕對(duì)值符號(hào)是因?yàn)?tx, ty有可能為負(fù) (即向左,向上移動(dòng) )。 下面的函數(shù) Translation 采用的是第一種做法,即移出的部分被截?cái)?。在給出源代碼之前,先說明一個(gè)問題。 如果你用過 Photoshop,Corel PhotoPaint等圖象處理軟件,可能聽說過“灰度圖” (grayscale)這個(gè)詞。灰度圖是指只含亮度信息,不含色 彩信息的圖象,就象我們平時(shí)看到的黑白照片:亮度由暗到明,變化是連續(xù)的。因此,要表示灰度圖,就需要把亮度值進(jìn)行量化。通常劃分成 0到 255共 256 個(gè)級(jí)別,其中 0 最暗 (全黑 ), 255 最亮 (全白 )。 .bmp 格式的文件中,并沒有灰度圖這個(gè)概念,但是,我們可以很容易在 .bmp 文件中表示灰度圖。方法是用 256 色的調(diào)色板,只不過這個(gè)調(diào)色板有點(diǎn)特殊,每一項(xiàng)的 RGB值都是相同的。也就是說 RGB值從 (0,0, 0), (1, 1, 1)一直到 (255, 255, 255)。 (0, 0, 0)是全黑色, (255, 255, 255)是全白色,中間的是 灰色。這樣,灰度圖就可以用 256色圖來表示了。為什么會(huì)這樣呢?難道是一種巧合?其實(shí)并不是。 在表示顏色的方法中,除了 RGB 外,還有一種叫 YUV 的表示方法,應(yīng)用也很多。電視信號(hào)中用的就是一種類似于 YUV的顏色表示方法。 在這種表示方法中, Y分量的物理含義就是亮度, U 和 V 分量代表了色差信號(hào) (你不必了解什么是色差,只要知道有這么一個(gè)概念就可以了 )。使用這種表示方法有很多好處,最主要的有兩點(diǎn): (1) 因?yàn)?Y代表了亮度,所以 Y分量包含了灰度圖的所有信息,只用 Y分量就能完全能夠表示出一幅灰度圖來。當(dāng)同時(shí)考慮 U, V分量時(shí),就能夠表示出彩色信息來。這樣,用同一種表示方法可以很方便的在灰度和彩色圖之間切換,而 RGB表示方法就做不到這一點(diǎn)了。 (2) 人眼對(duì)于亮度信號(hào)非常敏感,而對(duì)色差信號(hào)的敏感程度相對(duì)較弱。也就是說,圖象的主要信息包含在 Y分量中。這就提示我們:如果在對(duì) YUV信號(hào)進(jìn)行量化時(shí),可以“偏心”一點(diǎn),讓 Y的量化級(jí)別多一些 (誰讓它重要呢? )而讓 UV的量化級(jí)別少一些,就可以實(shí)現(xiàn)圖象信息的壓縮。這一點(diǎn)將在第 9 章介紹圖象壓縮時(shí)仔細(xì)研究,這里就不深入討論了。而 RGB的表示方法就做不到這一點(diǎn),因?yàn)?RGB 三個(gè)分量同等重要 ,缺了誰也不行。 YUV 和 RGB之間有著如下的對(duì)應(yīng)關(guān)系 () () 當(dāng) RGB 三個(gè)分量的大小 一樣時(shí),假設(shè)都是 a,代入公式 (),得到 Y=a, U=0, V=0 。你現(xiàn)在該明白我前面所說不是巧合的原因了吧。 使用灰度圖有一個(gè)好處,那就是方便。首先 RGB的值都一樣;其次,圖象數(shù)據(jù)即調(diào)色板索引值,也就是實(shí)際的 RGB值,也就是亮度值;另外,因?yàn)槭?256色調(diào)色板,所以圖象數(shù)據(jù)中一個(gè)字節(jié)代表一個(gè)象素,很整齊。如果是 2色圖或 16色圖,還要拼湊字節(jié),很麻煩。如果是彩色的 256色圖,由于圖象處理后有可能會(huì)產(chǎn)生不屬于這 256種顏色的新顏色,就更麻煩了;這一點(diǎn),今后你就會(huì)有深刻體會(huì)的。所以,做圖象處理時(shí),一般采用灰度圖 。為了將重點(diǎn)放在算法本身上, 今后給出的程序如不做特殊說明,都是針對(duì) 256 級(jí)灰度圖的。 其它顏色的情況,你可以自己想一想,把算法補(bǔ)全。 如果想得到一幅灰度圖,可以使用 Sea或者 PhotoShop等軟件提供的顏色轉(zhuǎn)換功能將彩色圖轉(zhuǎn)換成灰度圖。 好了,言歸正傳,下面給出 Translation 的源代碼。算法的思想是先將所有區(qū)域填成白色,然后找平移后顯示區(qū)域的左上角點(diǎn) (x0,y0) 和右下角點(diǎn) (x1,y1) ,分幾種情況進(jìn)行處理。 先看 x方向 (width指圖象的寬度 ) (1) tx≤ width:很顯然,圖象完全 移出了屏幕,不用做任何處理; (2) widthtx≤ 0:如圖 。容易看出,圖象區(qū)域的 x范圍從 0到 width|tx|,對(duì)應(yīng)原圖的范圍從 |tx|到 width; 圖 tx≤ 0, ty≤ 0的情況 (3) 0 tx width:如圖 。容易看出,圖象區(qū)域的 x范圍從 tx 到 width,對(duì)應(yīng)原圖的范圍從 0到 width tx ; 圖 0 txwidth, 0tyheight的情況 (4) tx ≥ width:很顯然,圖象完全移出了屏幕,不用做任何處理。 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,圖象完全移出了屏幕,不用做任何處理。 這種做法利用了位圖存儲(chǔ)的連續(xù)性,即同一行的象素在內(nèi)存中是相鄰的。利用 memcpy函數(shù),從 (x0,y0)點(diǎn)開始,一次可以拷貝一整行 (寬度為 x1- x0),然后將內(nèi) 存指針移到 (x0,y0+1)處,拷貝下一行。這樣拷貝 (y1y0)行就完成了全部操作,避免了一個(gè)一個(gè)象素的計(jì)算,提高了效率。Translation的源代碼如下: int xOffset=0,yOffset=0。 BOOL Translation(HWND hWnd) { DLGPROC dlgInputBox = NULL。 DWORD OffBits,BufSize。 LPBITMAPINFOHEADER lpImgData。 LPSTR lpPtr。 HLOCAL hTempImgData。 LPBITMAPINFOHEADER lpTempImgData。 LPSTR lpTempPtr。 int
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1