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

正文內(nèi)容

vc圖象處理教程(存儲版)

2025-02-07 07:45上一頁面

下一頁面
  

【正文】 OffBits=(BITMAPFILEHEADER)。 //將新的緩沖區(qū)中的每個字節(jié)都填成 255,這樣以后未處理的象素就是白色 memset(lpTempPtr,(BYTE)255,BufSize)。 } else xVisible=FALSE。 //表示移動后,有圖區(qū)域的右下角點的 y坐標 } else if ( yOffset){ DstY0=yOffset。 yVisible){ //x,y方向都沒有完全移出可顯示的范圍 for(i=0。 //拷貝一行 (寬度為 RectWidth) memcpy(lpTempPtr,lpPtr,RectWidth)。 _lclose(hf)。如圖。 ()的逆變換為 () 這樣,對于新圖中的每一點,我們就可以根據(jù)公式 ()求出對應(yīng)原圖中的點,得到它的灰度。 HLOCAL hTempImgData。 HDC hDc。 //出現(xiàn)對話框,輸入旋轉(zhuǎn)角度 (順時針方向 ) dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox,ghInst )。 //原圖的四個角的坐標 SrcX1=(float)(*Wold)。 //新圖四個角的坐標 DstX1=cosa*SrcX1+sina*SrcY1。 //計算新圖的寬度,高度 Wnew = (DWORD)(max(fabs(DstX4DstX1), fabs(DstX3DstX2))+)。 //新圖每行 占用的字節(jié) DstLineBytes=(DWORD)WIDTHBYTES(Wnew*)。 //將新的緩沖區(qū)中的每個字節(jié)都填成 255,這樣以后未處理的象素就是白色 memset(lpTempPtr,(BYTE)255,DstBufSize)。 //做一些必要的改變, 這一點特別要注意 =DstBufSize+sizeof(BITMAPFILEHEADER)。x1Wnew。amp。 _lwrite(hf,(LPSTR)amp。 return TRUE。 HLOCAL hTempImgData。 if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL) { MessageBox(hWnd,Error alloc memory!,Error Message,MB_OK| MB_ICONEXCLAMATION)。 if( XDirection){ //水平鏡象 for(y1=0。 *lpTempPtr=*lpPtr。 lpTempPtr=(char *)lpTempImgData+ (BufSizeLineBytesy1*LineBytes)+x1。bf,sizeof(BITMAPFILEHEADER))。 GlobalUnlock(hImgData)。 else hf=_lcreat(c:\\,0)。 y0=。 lpPtr=(char *)lpImgData+(BufSizeLineBytesy0*LineBytes)+x0。 memset(lpTempPtr,(BYTE)255,BufSize)。 OffBits=(BITMAPFILEHEADER)。 LPBITMAPINFOHEADER lpImgData。 LocalFree(hTempImgData)。 //釋放原來的位圖句柄 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+ sizeof(BITMAPINFOHEADER) + NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS)。amp。y1Hnew。DstBi,(char *)amp。 lpPtr=(char *)lpImgData。 //顯示時,采用新圖的寬度和高度, ImgWidth=Wnew。 DstX4=cosa*SrcX4+sina*SrcY4。 SrcX4=(float)(*Wold)。 //原圖的寬度和高度 Wold=。 BITMAPFILEHEADER DstBf。 float DstX3,DstY3,DstX4,DstY4。 LPBITMAPINFOHEADER lpImgData。 () 要注意的是,因為新圖變大,所以上面公式中出現(xiàn)了 wold, hold, wnew, hnew,它們分別表示原圖 (old)和新圖 (new)的寬、高。 } 旋轉(zhuǎn) 旋轉(zhuǎn) (rotation)有一個繞著什么轉(zhuǎn)的問題,通常的做法是以圖象的中心為圓心旋轉(zhuǎn),舉個例子,圖 30度 (順時針方向 )后如圖 : 圖 旋轉(zhuǎn)前的圖 圖 旋轉(zhuǎn)后的圖 可以看出,旋轉(zhuǎn)后圖象變大了。bf,sizeof(BITMAPFILEHEADER))。同樣要注意上面 //的問題。 //有圖區(qū)域的高度 if( xVisible amp。 else if( yOffset=0){ DstY0=0。 //表示移動后,有圖區(qū)域的右下角點的 x坐標 } else if ( xOffset){ DstX0=xOffset。 lpPtr=(char *)lpImgData。 DialogBox (ghInst, INPUTBOX, hWnd, dlgInputBox)。 int SrcX0,SrcY0,SrcX1,SrcY1。Translation的源代碼如下: int xOffset=0,yOffset=0。算法的思想是先將所有區(qū)域填成白色,然后找平移后顯示區(qū)域的左上角點 (x0,y0) 和右下角點 (x1,y1) ,分幾種情況進行處理。首先 RGB的值都一樣;其次,圖象數(shù)據(jù)即調(diào)色板索引值,也就是實際的 RGB值,也就是亮度值;另外,因為是 256色調(diào)色板,所以圖象數(shù)據(jù)中一個字節(jié)代表一個象素,很整齊。 (2) 人眼對于亮度信號非常敏感,而對色差信號的敏感程度相對較弱。這樣,灰度圖就可以用 256色圖來表示了。 如果你用過 Photoshop,Corel PhotoPaint等圖象處理軟件,可能聽說過“灰度圖” (grayscale)這個詞。 另一個問題是:平移后的圖象是否要放大?一種做法是不放大,移出的部分被截斷。如果你熟悉矩陣運算,你將發(fā)現(xiàn),實現(xiàn)這些變換是非常容易的。d:\msdev\MFC\LIB。如下所示: PATH=D:\MSDEV\BIN。 echo off set MSDevDir=d:\MSDEV set VcOsDir=WIN95 set PATH=%MSDevDir%\BIN。特別要注意的是,退出時,別忘了釋放內(nèi)存和資源,這是每個程序員應(yīng)該養(yǎng)成的習(xí)慣。由于所有操作都是在內(nèi)存中進行, 所以速度很快。 //顯示位圖 BitBlt(hDC, 0, 0, , , hMemDC, 0, 0, SRCCOPY)。 PAINTSTRUCT ps。該函數(shù)的第一項參數(shù)為設(shè)備上下文句柄。 //釋放設(shè)備上下文 GlobalUnlock(hImgData)。 if(hPalette) //如果剛才產(chǎn)生了邏輯調(diào)色板 { //將新的邏輯調(diào)色板選入 DC,將舊的邏輯調(diào)色板句柄保存在 //hPrevPalette hPrevPalette=SelectPalette(hDc,hPalette,FALSE)。 pPalpalPalEntry[i].peGreen=lpRGBrgbGreen。 //關(guān)閉文件 if(NumColors!=0) //NumColors不為零,說明用到了調(diào)色板 { //為邏輯調(diào)色板分配局部內(nèi)存,大小為邏輯調(diào)色板結(jié)構(gòu)長度加 //NumColors個 PALETTENTRY hPal=LocalAlloc(LHND,sizeof(LOGPALETTE)+ NumColors* sizeof(PALETTEENTRY))。 //關(guān)閉文件,返回 FALSE } =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD)+ImgSize。 //對于真彩色圖,沒用到調(diào)色板 break。 else //否則,用到的顏色數(shù)為 2biBitCount。 //將 BITMAPINFOHEADER結(jié)構(gòu)從文件中讀出,填寫到 bi中 _lread(hf,(LPSTR)amp。 //存儲調(diào)色板的局部內(nèi)存句柄 DWORD LineBytes。 BITMAPINFOHEADER bi。也就是說,從文件中最先讀到的是圖象最下 面一行的左邊第一個象素,然后是左邊第二個象素 …… 接下來是倒數(shù)第二行左邊第一個象素,左邊第二個象素 …… 依次類推 ,最后得到的是最上面一行的最右一個象素。下面針對 2色、 16色、 256色位圖和真彩色位圖分別介紹。數(shù)組中每個元素的類型是一個 RGBQUAD結(jié)構(gòu),占 4個字節(jié),其定義如下: typedef struct tagRGBQUAD { BYTE rgbBlue。舉個例子,如果 biWidth=240,則biWidth’=240;如果 biWidth=241, biWidth’=244)。 biWidth 指定圖象的寬度,單位是象素。 WORD biBitCount DWORD biCompression。 } BITMAPFILEHEADER。所以真彩色圖直接用 R、G、 B三個分量表示,它又叫做 24位色圖。整個圖象要用 200200,約 20k字節(jié),再加上表占用的字節(jié)為 316=48字節(jié) .整個占用的字節(jié)數(shù)約為前面的 1/6,省很多吧? 這張 R、 G、 B的表,就是我們常說的調(diào)色板 (Palette),另一種叫法是顏色查找表 LUT(Look Up Table),似乎更確切一些。 讓我們來看看下面的例子。有的顏色含有紅色成分多一些,如深紅;有的含有紅色成 分少一些,如淺紅。為了防止閃爍,每秒要重復(fù)上述過程幾十次。顯示時采用掃描的方法:電子槍每次從左到右掃描一行,為每個象素著色,然后從上到下這樣掃描若干行,就掃過了一屏。 我們知道,自然界中的所有顏色都可以由紅、綠、藍 (R, G, B)組合而成。的確是這樣的,但實際上的做法還有些差別。 讓我們再來計算一下: 16種狀態(tài)可以用 4位 (bit)表示,所以一個象素要用半個字節(jié)。原因很明顯:如果用調(diào)色板,表示一個象素也要用 24 位,這是因為每種顏色的索引要用 24 位 (因為總共有 224種顏色,即調(diào)色板有 224行 ),和直接用 R, G, B 三個分量表示用的字節(jié)數(shù)一樣,不但沒有任何便宜,還要加上一個 2562562563個字節(jié)的大調(diào)色板。 DWORD bfOffBits。 WORD biPlanes。 這個結(jié)構(gòu)的長度是固定的,為 40個字節(jié) (LONG為 32位整數(shù) ),各個域的說明如下: biSize 指定這個結(jié)構(gòu)的長度,為 40。 biSizeImage 指定實際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實也可以從以下的公式中計算出來: biSizeImage=biWidth’ biHeight 要注意的是:上述公式中的 biWidth’必須是 4的整倍數(shù) (所以不是 biWidth,而是 biWidth’,表示大于或等于 biWidth 的,最接近 4 的整倍數(shù)。 調(diào)色板實際上是一個數(shù)組,共有 biClrUsed 個元素 (如果該值為零,則有 2biBitCount個元素 )。對于真彩色圖,圖象數(shù)據(jù)就是實際的 R、 G、 B值。 (2) 一般來說, .bMP 文件的數(shù)據(jù)從下到上,從左到右的。 BITMAPFILEHEADER bf。 //設(shè)備句柄 HLOCAL hPal。bf,sizeof(BITMAPFILEHEADER))。 //NumColors為實際用到的顏色數(shù) ,即調(diào)色板數(shù)組中的顏色個數(shù) if(!=0) //如果 ,即為實際用到的顏色數(shù) NumColors=(DWORD)。 case 24:
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1