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

正文內(nèi)容

vc圖象處理教程(參考版)

2025-01-11 07:45本頁面
  

【正文】 GlobalUnlock(hImgData)。 LocalUnlock(hTempImgData)。 _lclose(hf)。bf,sizeof(BITMAPFILEHEADER))。 else hf=_lcreat(c:\\,0)。 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+ sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS)。 } } hDc=GetDC(hWnd)。 lpTempPtr=(char *)lpTempImgData+ (BufSizeLineBytesy1*LineBytes)+x1。 y0=。x1。y1。 *lpTempPtr=*lpPtr。 lpPtr=(char *)lpImgData+(BufSizeLineBytesy0*LineBytes)+x0。x1++){ x0=。y1++) for(x1=0。 if( XDirection){ //水平鏡象 for(y1=0。 memset(lpTempPtr,(BYTE)255,BufSize)。 lpPtr=(char *)lpImgData。 } lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData)。 if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL) { MessageBox(hWnd,Error alloc memory!,Error Message,MB_OK| MB_ICONEXCLAMATION)。 OffBits=(BITMAPFILEHEADER)。 HFILE hf。 LPSTR lpTempPtr。 HLOCAL hTempImgData。 LPBITMAPINFOHEADER lpImgData。 水平鏡象的變化矩陣為: () 垂直鏡象的變化矩陣為: () 鏡象變換的源代碼如下,因?yàn)楹推揭频哪嵌纬绦蚝茴愃?,程序中的注釋就簡單一些。圖 的水平鏡象和垂直 鏡象分別如圖 和圖 圖 圖 圖 圖 垂直鏡象 鏡象的變換矩陣很簡單。 return TRUE。 LocalFree(hTempImgData)。 //釋放資源和內(nèi)存 ReleaseDC(hWnd,hDc)。 _lwrite(hf,(LPSTR)lpTempImgData,DstBufSize)。 _lwrite(hf,(LPSTR)amp。 //釋放原來的位圖句柄 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+ sizeof(BITMAPINFOHEADER) + NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS)。 //進(jìn)行象素的復(fù)制 } } hDc=GetDC(hWnd)。 lpTempPtr=(char*)lpTempImgData+ (DstBufSizeDstLineBytesy1*DstLineBytes)+x1。amp。amp。amp。 y0= (DWORD)(*x1*sina+y1*cosa+num2)。x1Wnew。y1Hnew。DstBi,sizeof(BITMAPINFOHEADER))。 =Hnew。 //做一些必要的改變, 這一點(diǎn)特別要注意 =DstBufSize+sizeof(BITMAPFILEHEADER)。DstBi,(char *)amp。bf,sizeof(BITMAPFILEHEADER))。 //得到新的 BITMAPFILEDER和 BITMAPINFOHERDER memcpy((char *)amp。 //將新的緩沖區(qū)中的每個字節(jié)都填成 255,這樣以后未處理的象素就是白色 memset(lpTempPtr,(BYTE)255,DstBufSize)。 lpPtr=(char *)lpImgData。 //失敗,返回 } //lpImgData為指向原來位圖數(shù)據(jù)的指針 lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData)。 //要開的緩沖區(qū)的大小 //為新產(chǎn)生的位圖分配緩沖區(qū)內(nèi)存 if((hTempImgData=LocalAlloc(LHND,DstBufSize))==NULL) { MessageBox(hWnd,Error alloc memory!,Error Message, MB_OK|MB_ICONEXCLAMATION)。 //新圖每行 占用的字節(jié) DstLineBytes=(DWORD)WIDTHBYTES(Wnew*)。 //顯示時,采用新圖的寬度和高度, ImgWidth=Wnew。 //OffBits為 BITMAPINFOHEADER結(jié)構(gòu)長度加調(diào)色板的大小 OffBits=(BITMAPFILEHEADER)。 //計(jì)算矩陣 ()中的兩個常數(shù),這樣不用以后每次都計(jì)算了 num1=(float)( *Wnew**Hnew*sina+*Wold)。 //計(jì)算新圖的寬度,高度 Wnew = (DWORD)(max(fabs(DstX4DstX1), fabs(DstX3DstX2))+)。 DstX4=cosa*SrcX4+sina*SrcY4。 DstX3=cosa*SrcX3+sina*SrcY3。 DstX2=cosa*SrcX2+sina*SrcY2。 //新圖四個角的坐標(biāo) DstX1=cosa*SrcX1+sina*SrcY1。 SrcX4=(float)(*Wold)。 SrcX3=(float)(*Wold)。 SrcX2=(float)(*Wold)。 //原圖的四個角的坐標(biāo) SrcX1=(float)(*Wold)。 //原圖的寬度和高度 Wold=。 cosa=(float)cos((double)RotateAngle)。 FreeProcInstance ( (FARPROC) dlgInputBox )。 //出現(xiàn)對話框,輸入旋轉(zhuǎn)角度 (順時針方向 ) dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox,ghInst )。 BITMAPFILEHEADER DstBf。 //cos(a),sin(a)。 DWORD x0,y0,x1,y1。 HDC hDc。 float DstX3,DstY3,DstX4,DstY4。 float SrcX3,SrcY3,SrcX4,SrcY4。 LPSTR lpTempPtr。 HLOCAL hTempImgData。 LPBITMAPINFOHEADER lpImgData。 源程序如下: define PI define RADIAN(angle) ((angle)*PI/) //角度到弧度轉(zhuǎn)化的宏 BOOL Rotation(HWND hWnd) { DLGPROC dlgInputBox = NULL。要注意的是,由于有浮點(diǎn)運(yùn)算,計(jì)算出來點(diǎn)的坐標(biāo)可能不是整數(shù),采用取整處理,即找最接近的點(diǎn) ,這樣會帶來一些誤差 (圖象可能會出現(xiàn)鋸齒 )。 ()的逆變換為 () 這樣,對于新圖中的每一點(diǎn),我們就可以根據(jù)公式 ()求出對應(yīng)原圖中的點(diǎn),得到它的灰度。 () 要注意的是,因?yàn)樾聢D變大,所以上面公式中出現(xiàn)了 wold, hold, wnew, hnew,它們分別表示原圖 (old)和新圖 (new)的寬、高。它和以圖象左上角點(diǎn)為原點(diǎn) o’,向右為 x’軸正方向,向下為 y’軸正方向的坐標(biāo)系 x’o’y’之間的轉(zhuǎn)換關(guān)系如何呢?如圖 。在我們熟悉的坐標(biāo)系中,將一個點(diǎn)順時針旋轉(zhuǎn) a角后的坐標(biāo)變換公式,如圖 , r為該點(diǎn)到原點(diǎn)的距離,在旋轉(zhuǎn)過程中, r保持不變;b為 r與 x軸之間的夾角。如圖。 } 旋轉(zhuǎn) 旋轉(zhuǎn) (rotation)有一個繞著什么轉(zhuǎn)的問題,通常的做法是以圖象的中心為圓心旋轉(zhuǎn),舉個例子,圖 30度 (順時針方向 )后如圖 : 圖 旋轉(zhuǎn)前的圖 圖 旋轉(zhuǎn)后的圖 可以看出,旋轉(zhuǎn)后圖象變大了。 GlobalUnlock(hImgData)。 LocalUnlock(hTempImgData)。 _lclose(hf)。bf,sizeof(BITMAPFILEHEADER))。 //將平移后的圖象存成文件 hf=_lcreat(c:\\,0)。 if(hBitmap!=NULL) DeleteObject(hBitmap)。 //拷貝一行 (寬度為 RectWidth) memcpy(lpTempPtr,lpPtr,RectWidth)。同樣要注意上面 //的問題。 lpPtr=(char*)lpImgData+(BufSizeLineBytes (i+SrcY0)*LineBytes)+SrcX0。i++){ //拷貝每一行 //lpPtr指向要拷貝的那一行的最左邊的象素對應(yīng)在原圖中的位 //置。 yVisible){ //x,y方向都沒有完全移出可顯示的范圍 for(i=0。 //有圖區(qū)域的高度 if( xVisible amp。 //對應(yīng) DstY0在原圖中的 y坐標(biāo) SrcY1=DstY1yOffset。 } else yVisible=FALSE。 //表示移動后,有圖區(qū)域的右下角點(diǎn)的 y坐標(biāo) } else if ( yOffset){ DstY0=yOffset。 else if( yOffset=0){ DstY0=0。 //有圖區(qū)域的寬度 //yVisible為 FALSE時,表示 y方向已經(jīng)移出了可顯示的范圍 yVisible=TRUE。 //對應(yīng) DstX0在原圖中的 x坐標(biāo) SrcX1=DstX1xOffset。 } else xVisible=FALSE。 //表示移動后,有圖區(qū)域的右下角點(diǎn)的 x坐標(biāo) } else if ( xOffset){ DstX0=xOffset。 else if( xOffset=0){ DstX0=0。 //xVisible為 FALSE時,表示 x方向已經(jīng)移出了可顯示的范圍 xVisible=TRUE。 //將新的緩沖區(qū)中的每個字節(jié)都填成 255,這樣以后未處理的象素就是白色 memset(lpTempPtr,(BYTE)255,BufSize)。 lpPtr=(char *)lpImgData。 //失敗,返回 } //lpImgData為指向原來位圖數(shù)據(jù)的指針 lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData)。//要開的緩沖區(qū)的大小 //為新產(chǎn)生的位圖分配緩沖區(qū)內(nèi)存 if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL) { MessageBox(hWnd,Error alloc memory!,Error Message,MB_OK| MB_ICONEXCLAMATION)。 //OffBits為 BITM
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1