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

正文內(nèi)容

江南大學學士畢業(yè)論文--圖像處理的程序設計--基于vc6(編輯修改稿)

2024-12-22 18:08 本頁面
 

【文章內(nèi)容簡介】 TMAPINFO 結(jié)構和圖像數(shù)據(jù)就可以了。 DIB 的編 程 DIB(Independent Bitmap) API 函數(shù)庫中的有些重要函數(shù)在以后的程序設計中經(jīng)常用到,現(xiàn)列舉如下: 1. FindDIBBits() 參數(shù) : LPSTR lpbi //指向 DIB 對象的指針 返回值 : LPSTR //指向 DIB 圖像象素起始位置 說明 : 該函數(shù)計算 DIB 中圖像象素的起始位置,并返回指向它的指針。 2. DIBWidth() 參數(shù) : LPSTR lpbi //指向 DIB 對象的指針 返回值 : DWORD //DIB 中圖像的寬度 說明 : 該函數(shù)返回 DIB 中圖像的寬度。對于 Windows DIB ,返回BITMAPINFOHEADER 中的 biWidth 值;對于其它返回 BITMAPCOREHEADER中的 bcWidth 值。 3. DIBHeight() 參數(shù) : LPSTR lpDIB //指向 DIB 對象的指針 返回值 : DWORD // DIB 中圖像的高度 說明 : 該函數(shù)返回 DIB 中 圖 像 的 高 度 。 對 于 Windows DIB , 返 回BITMAPINFOHEADER中的 biHeight值;對于其它返回 BITMAPCOREHEADER中的 bcHeight 值。 4. DIBNumColors() 江南大學學士學位論文 12 參數(shù) : LPSTR lpbi //指向 DIB 對象的指針 返回值 : WORD //返回調(diào)色板中顏色的種數(shù) 說明 : 該函數(shù)返回 DIB 中調(diào)色板的顏色的種數(shù)。對于單色位圖,返回 2;對于 16 色位圖,返回 16;對于 256 色位圖,返回 256;對于真彩色位圖( 24 位),沒有調(diào)色板,返回 0。對于 Windows 的 DIB, 實際顏色的數(shù)目可以比象素的位數(shù)要少。對于這種情況,則返回一個近似的數(shù)值。 5. define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4) 本章小結(jié) 在 Windows 的編程中,彩色圖像的顯示和處理是一個重要的課題。位圖既可以以資源的形式與程序綁在一起,也可以以文件的形式從外部裝入。聯(lián)系位圖時可以使用 API函數(shù)。本章就此進行討論。 江南大學學士學位論文 13 第四章 編程實現(xiàn)圖像復合 圖像變換 為了圖像復合時變幻出各種效果,有時需要圖像變換中的平移、旋轉(zhuǎn)等操作來實現(xiàn)。這里討論的圖像變換,可以看作圖像不動而坐標系變動,變動后,該圖像在新的坐標系下具有新的坐標值。通常以點變換作為基礎,把圖像的一系列像素作幾何變換后,顯示新的像素即可產(chǎn)生新的圖像。 平移 原理 在下圖中,平移前的坐標為( x0,y0),變換后為( x1,y1)。 tx 是水平方向移動的距離, ty 是垂直方向移動的距離。 由圖可知: x1 = x0 + tx y1 = y0 + ty 用二維變換矩陣來描述( x0,y0)和( x1,y1)之間的關系: x1 1 0 tx x0 江南大學學士學位論文 14 y1 = 0 1 ty y0 1 0 0 1 1 反變換可由矩陣的逆來求,如下所示: x0 1 0 tx x1 y0 = 0 1 ty y1 1 0 0 1 1 在這里,圖像中每一個變換后的點都能在原圖像 中找到相應的點。但是這些變換后的點有可能超出原圖像的范圍。在程序的實現(xiàn)中,將這些點丟棄,并在原圖像的移出位置讓它以白色顯示。 編程實現(xiàn) 在 Graphics_czView 類里添加一個成員函數(shù) InteMove( )來實現(xiàn)這一圖像變換功能。但是該函數(shù)僅局限于處理 BMP 圖像。 具體實現(xiàn)如下: BOOL CGraphics_czView::InteMove(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, LONG lXOffset, LONG lYOffset, WORD count) { //指向原圖象的指針 LPSTR lpSrc。 LPSTR lpDst。 LPSTR lpNewDIBBits。 HLOCAL hNewDIBBits。 //循環(huán)變量 LONG i。 LONG j。 LONG k。 LONG i0。 LONG j0。 int s。 if(count= =0) s=3。 else if(count= =256) s=1。 else if(count= =16) s=2。 else s=8。 //圖象 每行的字節(jié)數(shù) LONG lLineBytes。 江南大學學士學位論文 15 if(s= =3||s= =1) { lLineBytes=WIDTHBYTES(lWidth*8*s)。 } else { lLineBytes=WIDTHBYTES(lWidth*8/s)。 } int tag。 int lWidth_1。 if(count= =0) { tag=3。 lWidth_1=lWidth。 } else { tag=1。 lWidth_1=lLineBytes。 } hNewDIBBits=LocalAlloc(LHND,lLineBytes*lHeight)。 if(hNewDIBBits= =NULL) { return FALSE。 } lpNewDIBBits=(char*)LocalLock(hNewDIBBits)。 for(i=0。ilHeight。i++) { for(j=0。jlWidth_1。j++) { lpDst=(char*)lpNewDIBBits+lLineBytes*i+j*tag。 i0=ilYOffset。 j0=jlXOffset。 if((j0=0)amp。amp。(j0lWidth)amp。amp。(i0=0)amp。amp。(i0lHeight)) { lpSrc=(char*)lpDIBBits+lLineBytes*i0+j0*tag。 for(k=0。ktag。k++) { *(lpDst+k)=*(lpSrc+k)。 } } else { 江南大學學士學位論文 16 for(k=0。ktag。k++) *((unsigned char*)lpDst+k)=255。 } } } memcpy(lpDIBBits,lpNewDIBBits,lLineBytes*lHeight)。 LocalUnlock(hNewDIBBits)。 LocalFree(hNewDIBBits)。 return true。 } 效果圖 我們用一幅 BMP 圖像的平移來演示圖像平移前后的情形。 圖 41 平 移前的圖像 圖 42 平移后的圖像 旋轉(zhuǎn) 原理 我們這里討論的旋轉(zhuǎn)是以圖像的中心為旋轉(zhuǎn)點進行旋轉(zhuǎn)的。旋轉(zhuǎn)后,圖像的大小并未發(fā)生改變,但是顯示區(qū)域卻有可能改變。有兩種顯示方法,一種是增大圖像的顯示區(qū)域,使旋轉(zhuǎn)后的圖像能完全顯示出來,如圖 44;另一種方法是按原圖像的區(qū)域顯示,將區(qū)域之外的圖像截掉。原圖像旋轉(zhuǎn)后露出的空白區(qū)域,以白色填充,如圖 45。 圖 43 原圖像 圖 44 完全顯示 圖 45 截圖顯示 下面討論旋轉(zhuǎn)的算法: 如下圖所示,點 (x0,y0)旋轉(zhuǎn) θ 角后到達點 (x1,y1)。 江南大學學士學位論文 17 由圖可知: x1 = x0cos(θ)+y0sin(θ) y1 = x0sin(θ)+y0cos(θ) 用二維變換矩陣來描述( x0,y0)和( x1,y1)之間的關系: 反變換可由矩陣的逆來求 ,如下所示: 上面討論的是以原點為中心進行的旋轉(zhuǎn)。如要按坐標系中的某一點進行旋轉(zhuǎn)。則需將平移變換與旋轉(zhuǎn)變換結(jié)合起來考慮,實行復合變換。假設以坐標系中的( a,b)為中心進行旋轉(zhuǎn),某點旋轉(zhuǎn)前為( x0,y0),旋轉(zhuǎn)后為( x1,y1),旋轉(zhuǎn)后旋轉(zhuǎn)中心變?yōu)椋?c,d)則二維變換矩陣為: 反變換可由矩陣的逆來求,如下所示: 可得: x0=x1cos(θ)+y1sin(θ)ccos(θ)dsin(θ)+a; y0=x1sin(θ)+y1cos(θ)csin(θ)dcos(θ)+b; 在以圖像為中心進行旋轉(zhuǎn),且不擴大顯示區(qū)域的實現(xiàn)中, a、 b、 c、 d 分別為: 江南大學學士學位論文 18 , 。 編程實現(xiàn) 在 Graphics_czView 類里添加一個成員函數(shù) InteRotate( )來實現(xiàn)這一圖像變換功能。但是該函數(shù)僅局限于處理 BMP 圖像。 具體實現(xiàn)如下: BOOL CGraphics_czView::InteRotate(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int angle, WORD count) { //指向原圖象的指針 LPSTR lpSrc。 LPSTR lpDst。 LPSTR lpNewDIBBits。 HLOCAL hNewDIBBits。 //循環(huán)變量 LONG i。 LONG j。 LONG k。 LONG i0。 LONG j0。 LONG lLineBytes。 float RotateAngle。 float sina。 float cosa。 int s。 if(count= =0) s=3。 else if(count= =256) s=1。 else if(count= =16) s=2。 else s=8。 //圖象每行的字節(jié)數(shù) if(s= =3||s= =1) { lLineBytes=WIDTHBYTES(lWidth*8*s)。 江南大學學士學位論文 19 } else { lLineBytes=WIDTHBYTES(lWidth*8/s)。 } int tag。 int lWidth_1。 if(count= =0) { tag=3。 lWidth_1=lWidth。 } else { tag=1。 lWidth_1=lLineBytes。 } RotateAngle=(float)(angle*)。 sina=(float)sin((double)RotateAngle)。 cosa=(float)cos((double)RotateAngle)。 hNewDIBBits=LocalAlloc(LHND,lLineBytes*lHeight)。 if(hNewDIBBits= =NULL) { return FALSE。 } lpNewDIBBits=(char*)LocalLock(hNewDIBBits)。 for(i=0。ilHeight。i++) { for(j=0。jlWidth_1。j++) { lpDst=(char*)lpNewDIBBits+lLineBytes*i+j*tag。 i0=(LONG)(i*cosaj*sina(lHeight1)*cosa*+(lWidth1)*sina* +(lHeight1)*)。 j0=(LONG)(i*sina+j*cosa(lHeight1)*
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1