




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、圖形圖象程序設(shè)計(jì)基礎(chǔ)圖形圖象程序設(shè)計(jì)基礎(chǔ)常用顏色模式常用顏色模式rgbrgb模式模式abgrrgba模式模式argbbgra模式模式rgb(255,0,0)0 xff0000ff0 xffff000024位位32位位存放顏色的數(shù)據(jù)結(jié)構(gòu)及其合成存放顏色的數(shù)據(jù)結(jié)構(gòu)及其合成rgb模式: colorref clr; clr=rgb(r,g,b);rgba模式: uint clr; clr=(a24)+(b16)+(g8)+r;bgra模式: uint clr; clr=(a24)+(r16)+(g24; a2=(uint)clr224; if(a2=0) return clr1; if(a1=255)
2、 return clr1; if(a1=0) return clr2;argb r1=clr1&0 x00ff0000; g1=clr1&0 x0000ff00; b1=clr1&0 x000000ff; r2=clr2&0 x00ff0000; g2=clr2&0 x0000ff00; b2=clr2&0 x000000ff; r=(uint)(255-a1)*r2+a1*r1)24; g=(uint)(255-a1)*g2+a1*g1)16; b=(uint)(255-a1)*b2+a1*b1)8; a=(a1a2?a1:a2);argb n
3、ew_color=(uint)(a24)+(uint)(r16) +(uint)(ggetsafehdc(),x,y,wid,hei, 0,0, wid,hei,buf,&bmpinfo, dib_rgb_colors,srccopy);例:在例:在800*600窗口中顯示一個(gè)矩形。窗口中顯示一個(gè)矩形。直接寫入設(shè)備緩沖區(qū):直接寫入設(shè)備緩沖區(qū): cclientdc dc(this); int x,y; for(y=100; y=400; y+) for(x=100; x=400; x+) dc.setpixel(x,y,rgb(255,0,0);速度慢,不能疊加速度慢,不能疊加先形成內(nèi)存
4、圖象緩沖區(qū),再一次性寫入設(shè)備緩沖區(qū):先形成內(nèi)存圖象緩沖區(qū),再一次性寫入設(shè)備緩沖區(qū): int win_wid=800, win_hei=600; int x,y; uint *buf; cclientdc *dc; dc=new cclientdc(this); buf=new uintwin_wid*win_hei; for(y=100; y=400; y+) for(x=100; x=400; x+) bufy*win_wid+x=0 xffff0000; out_buf(0,0, win_wid,win_hei,buf);在內(nèi)存緩沖區(qū)畫圖元在內(nèi)存緩沖區(qū)畫圖元void line(int x1
5、,int y1,int x2,int y2,uint clr) int i,e,x,y,s1,s2,increx,increy,tamp,interchange; long int add; x=x1; y=y1; if(x1x2) s1=1; else s1=-1; if(y1increx) tamp=increx; increx=increy; increy=tamp; interchange=1; else interchange=0; e=increy+increy-increx; for(i=0;i=0) if(interchange=1) x=x+s1; else y=y+s2;
6、e=e-increx-increx; if(interchange=1) y=y+s2; else x=x+s1; e=e+increy+increy; 寫一塊圖象到內(nèi)存圖象緩沖區(qū)的指定位置寫一塊圖象到內(nèi)存圖象緩沖區(qū)的指定位置void write_video(int x0,int y0,int dx,int dy, uint *image) int i,j,x1,y1,x2,y2, add,add0,ad,ad0=0; add0=y0*win_wid+x0; for(i=y0;iy0+dy;i+) add=add0; ad=ad0; for(j=x0;jx0+dx;j+) bufadd+=im
7、agead+; ad0+=dx; add0+=win_wid; 疊加一塊圖象到內(nèi)存圖象緩沖區(qū)的指定位置疊加一塊圖象到內(nèi)存圖象緩沖區(qū)的指定位置void overlay_video(int x0,int y0,int dx,int dy, uint *image) int i,j,x1,y1,x2,y2, add,add0,ad,ad0=0; add0=y0*win_wid+x0; for(i=y0;iy0+dy;i+) add=add0; ad=ad0; for(j=x0;jx0+dx;j+) bufadd=overlay_color(imagead+, bufadd); add+; ad0+=
8、dx; add0+=win_wid; 疊加半透明玻璃疊加半透明玻璃 for(y=200; y=300; y+) for(x=200; x=300; x+) bufy*win_wid+x=overlay_color( 0 x800000ff, bufy*win_wid+x); out_buf(0,0, win_wid,win_hei,buf);彩色圖象轉(zhuǎn)換為黑白圖象彩色圖象轉(zhuǎn)換為黑白圖象(灰度化)(灰度化)灰度值灰度值: z=0.3r+0.59g+0.11b uchar *c, z; for(y=0; ywin_hei; y+) for(x=0; xwin_wid; x+) c=(uchar *
9、) (buf+y*win_wid+x); z=(uchar)(0.11*c0+0.59*c1+0.3*c2); c0=z; c1=z; c2=z; bgrac讀取讀取bmp圖象格式文件圖象格式文件byte *bitbuf;void readbmp(char *fname,int wid,int hei, uint *buf) int i,j,k,dx,dy,count,pnum,headersize; cfile file; bitmapfileheader fileheader; /文件頭文件頭 bitmapinfoheader inheader; /信息頭信息頭 byte *bits,*b
10、itbuf,*tmp; rgbquad pall256; /調(diào)色板調(diào)色板 if(!file.open(fname,cfile:moderead) ) memset(buf,0,wid*hei*sizeof(int); return 0; file.read(&fileheader, sizeof(bitmapfileheader); file.read(&inheader, sizeof(bitmapinfoheader); dx=inheader.biwidth; /原圖象寬度原圖象寬度 dy=inheader.biheight; /原圖象寬度原圖象寬度 count=inhe
11、ader.bibitcount; /一象素所占位數(shù)一象素所占位數(shù) pnum=inheader.biclrused; headersize=fileheader.bfoffbits; /文件頭長度文件頭長度 if(count=1&pnum=0) pnum=2; if(count=4&pnum=0) pnum=16; if(count=8&pnum=0) pnum=256; if(pnum)file.read(pall,sizeof(rgbquad)*pnum); bits=new bytedx*4; if(wid=dx&hei=dy) bitbuf=(byte *
12、)buf; else bitbuf=new bytedx*dy*4; file.seek(headersize,cfile:begin);/ 讀讀8位圖象位圖象 if(count=8) tmp=bitbuf;for(i=0;idy;i+) file.read(bits,(dx+3)/4*4); bitbuf=tmp+(dy-i-1)*dx*4; for(j=0;jdx;j+) k=bitsj; *bitbuf+=pallk.rgbblue; *bitbuf+=pallk.rgbgreen; *bitbuf+=pallk.rgbred; *bitbuf+=255; bitbuf=tmp; els
13、e if(count=24) tmp=bitbuf; for(i=0;idy;i+) file.read(bits,(dx*3+3)/4*4); bitbuf=tmp+(dy-i-1)*dx*4; for(j=0;jdx;j+) *bitbuf+=bitsj*3; *bitbuf+=bitsj*3+1; *bitbuf+=bitsj*3+2; *bitbuf+=255; bitbuf=tmp;else if(count=32) tmp=bitbuf; for(i=0;idy;i+) file.read(bits,dx*4); bitbuf=tmp+(dy-i-1)*dx*4;for(j=0;j
14、dx;j+) *bitbuf+=bitsj*4; *bitbuf+=bitsj*4+1; *bitbuf+=bitsj*4+2; bitbuf+=bitsj*4+3; bitbuf=tmp; delete bits; file.close(); if(wid!=dx|hei!=dy) buf_resize(dx,dy,(uint*)bitbuf, wid,hei,buf);delete bitbuf; return 1;圖象縮放函數(shù)圖象縮放函數(shù)void buf_resize(int wid,int hei,uint *sbuf, int dx,int dy,unsigned int *dbuf
15、) int i,j,k,k0,add0; float xstep,ystep,xx,yy; xstep=(float)(wid-1)/(dx-1); ystep=(float)(hei-1)/(dy-1); k0=0; k=0; if(dxwid&dyhei) /縮小縮小 for(yy=0;yyhei;yy+=ystep) add0=(int)yy*wid; k=k0;for(xx=0;xxwid;xx+=xstep) dbufk+=sbuf(int)(add0+xx); k0+=dx; else for(i=0;idy;i+) /放大放大 add0=(int)(i*ystep)*wid; for(j=0;jdx;j+) dbufk+=sbuf(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025畢業(yè)論文答辯模板:學(xué)術(shù)新力量10
- 人教版數(shù)學(xué)六年級下冊單位換算綜合練習(xí)1000題含答案
- 湖北科技職業(yè)學(xué)院《民航公共關(guān)系》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶海聯(lián)職業(yè)技術(shù)學(xué)院《中級韓國語視聽說》2023-2024學(xué)年第一學(xué)期期末試卷
- 安徽省滁州市來安縣2025屆初三第一次摸底考試化學(xué)試題含解析
- 山西體育職業(yè)學(xué)院《基礎(chǔ)護(hù)理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 達(dá)拉特旗2025屆三年級數(shù)學(xué)第二學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含解析
- 揚(yáng)州大學(xué)《食品學(xué)科前沿進(jìn)展》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南水利水電職業(yè)技術(shù)學(xué)院《城鄉(xiāng)綠地系統(tǒng)規(guī)劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年山西省高平市重點(diǎn)達(dá)標(biāo)名校初三下期末調(diào)研測試英語試題含答案
- 新音樂初放 學(xué)堂樂歌說課課件
- 對外漢語教學(xué)法智慧樹知到答案章節(jié)測試2023年西北師范大學(xué)
- 樂泰膠用戶手冊
- 社會(huì)工作行政教案
- 通力電梯ctp-10.65s2a kce控制系統(tǒng)
- 課件:國產(chǎn)C919大飛機(jī)
- 反應(yīng)釜泄漏事故應(yīng)急處置卡
- GB/T 701-2008低碳鋼熱軋圓盤條
- GB 9706.19-2000醫(yī)用電氣設(shè)備第2部分:內(nèi)窺鏡設(shè)備安全專用要求
- 遵義會(huì)議介紹及歷史意義模板課件
- 中圖版八年級下冊地理《第三節(jié)-歐洲西部》(一等獎(jiǎng)?wù)n件)-
評論
0/150
提交評論