CBuilder_6圖形、圖像及實例_第1頁
CBuilder_6圖形、圖像及實例_第2頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、okoket內(nèi)容提要: 本文介紹了圖形的繪制和圖像處理, 其中詳細(xì)介紹了畫布(Canvas)的屬性與使用方法,利用它們,可以非常直觀方便地繪制直線、曲線、矩形、橢圓等各種圖形。本文還介紹了圖像處理的方法,其中包括 Image 組件、TBitmap 類和 TJPEGImage 類的使用,而要進(jìn)行快速的圖像處理, 幾乎都離不開ScanLine技術(shù)。 使用ScanLine技術(shù), 能夠快速取得bitmap的每行的顏色值,而無需使用 Canvas 的 Pixels 屬性逐點獲取像素點的顏色值。關(guān)鍵字:C+Builder、圖形、圖像、畫布引言:自 Windows 誕生以來,可以通過 GDI(Graphic

2、sDeviceInterface)來實現(xiàn)圖形的繪制。然而對于初學(xué)者來說, 龐大復(fù)雜的 GDI 繪圖系統(tǒng)是一個難以跨越的學(xué)習(xí)障礙。所幸的是,在C+Builder 繪圖系統(tǒng)中,提供了一個簡易可行的畫布(Canvas),可以用非常直觀的方式來實現(xiàn)Windows 下的繪圖功能。C+Builder 提供了 Image 組件,可以很方便地裝載圖像,以及進(jìn)行圖像處理。正文:1 在窗體上作圖1.1 知識要點1. 畫布(Canvas)在 C+Builder 中,幾乎所有的可視化組件(包括:Form、Image、Bitmap、PaintBox)都包含Canvas 屬性。 Canvas 包含了許多和繪圖有關(guān)的性質(zhì),

3、 如 Pen、 Brush、 Pixels、Font 等,另外它還包含了各種繪圖的函數(shù),如 LineTo、Rectangle、MoveTo、Polygon 等。(1)Canvas 類主要屬性有:Font:畫布繪制文本所用的字體。Brush:用于填充背景的畫筆刷。Pen:用來畫線和描述圖形輪廓的畫筆。PenPos:當(dāng)前繪圖位置的坐標(biāo)。Pixels:畫布像素數(shù)組。2)Canvas 類主要方法有:Arc:用當(dāng)前畫筆在畫布上畫圓弧。Chord:繪制由直線和橢圓相交而成的一個封閉形狀。CopyRect:將圖形的一部分從另一個畫布復(fù)制過來。Ellipse:在給定的區(qū)域繪制橢圓。FillRect:用當(dāng)前畫刷

4、填充指定的矩形。FloodFill:用當(dāng)前畫刷填充指定的區(qū)域。(3)LineTo 類主要方法有:MoveTo:連同 LineTo 繪制直線。Polygon:繪出一系列的線,串起所傳入的各個點,并從最后一點到第一點繪制一條線。Polyline:繪出一系列的線,串起所傳入的各個點。Rectangle:繪制圓角矩形。StretchDraw:在畫布上給定的大小繪制圖像。TextOut:在畫布上寫出字符串。TextRect:在限定的區(qū)域?qū)懗鲎址瑓^(qū)域之外的字符串不會被顯示出來。2. 顏色常數(shù)在 C+Builder 中提供了許多顏色的預(yù)定常數(shù),這些預(yù)設(shè)顏色都以 cl(cl 代表color)為啟始字1oC

5、+Builder 圖形、圖像及實例 wokcn符命名。例如 clRed 代表紅色,clBlue 代表藍(lán)色,clGreen 代表綠色等等。另外 C+Builder 也將 Windows的基本顏色以常數(shù)定義,如 clWindow 及 clMenu 分別代表 Window 及 Menu(菜單)的顏色。下面列出部分 C+Builder 定義的顏色常數(shù):clBlack:黑色。clGreen:綠色。clOlive:橄欖綠。clNavy:海藍(lán)色。clPurple:紫色。clTeal:青紫色。clGray:灰色。clSilver:銀色。clRed:紅色。clLime:灰綠色。clBlue:藍(lán)色。clAqua:

6、淡綠青色。clWhite:白色。clBackground:Window 背景色。clActiveCaption:活動視窗的標(biāo)題色。clInactiveCaption:非活動視窗的標(biāo)題色。clMenu:Menu 的顏色。clWindow:Windows 的背景色。clMenuText: Menu 文字的顏色。clWindowText:Window 內(nèi)文字的顏色。clCaptionText:標(biāo)題文字的顏色。clActiveBorder:活動視窗的邊界顏色。clHighlight:高亮度 Windows 顏色。clHightlightText:被選取文字的顏色。clGrayText:灰色文字的顏色。

7、clBtnText:Button 內(nèi)文字的顏色。以下的程序表示將畫布中(3,5)這一像素點的顏色設(shè)為藍(lán)色:Canvas-Pixels35=clBlue;另外, 也可以利用以下的敘述來設(shè)定畫筆的顏色為藍(lán)色:Canvas-Pen-Color=RGB(0,0,255);3. RGB 函數(shù)任何一種顏色都是由紅、綠、藍(lán)三種基本色構(gòu)成的。RGB 函數(shù)是 Windows 系統(tǒng)用以表示顏色的方式,它們用三個字節(jié)型參數(shù)變量,分別代表紅色(Red)、綠色(Green)及藍(lán)色(Blue)的強度值(0255 之間),組合起來表示顏色。例如 RGB(255,0,0)代表紅色(RGB(255,0,0)所代表的顏色和顏色常

8、數(shù) clRed 是相同的)。如果 RGB 函數(shù)中的三個參數(shù)相同,即紅、綠、藍(lán)的強度值一樣,則其代表的顏色是黑白的。例如 RGB(255,255,255)代表白色,RGB(0,0,0)代表黑色。4. Tcolor 類Tcolor 是表示顏色的類,其實例可以是 clRed、clBlue、clGreen 等剛才介紹到的顏色常數(shù),例如:Tcolorcolor=clRed;也可以使用 RGB 函數(shù)來取值,例如:2ookcnTcolorcolor=RGB(4,34,253);5. Pen 和 BrushTpen 是在 Canvas 畫線所使用的“筆”,因此所有和線條有關(guān)的繪圖函數(shù)都會受 Tpen 影響,如

9、LineTo、Ellipse、Polygon、PolyLine、Rectangle 等函數(shù)都使用“筆”來畫線,可以利用 Canvas.Pen來存取 Pen,并且可以修改 Pen 的性質(zhì),這些性質(zhì)包含 Color、Width、Style,以及 Mode 等。Style屬性用來設(shè)置畫筆樣式:Pen-Style 二 psSolid,表示畫筆是實心;二 psDash 表示破折線;二 psDot表示點線;=psDashDot表示破折線+點線;二 psClear 表示透明線。Width 屬性用來設(shè)置畫筆的寬度,Pen-Width=5 表示畫筆的寬度為 5 個像素。Color 屬性用來設(shè)定畫筆的顏色。例如:

10、Canvas-Pen-Color 二 clBlue;則表示將畫筆的顏色設(shè)為藍(lán)色。Tbrush 可用來在 Canvas 的特定區(qū)域下著色。和 Tpen 不同的是,Tbrush可以用不同的顏色、樣式及圖案來填滿 Canvas 的特定區(qū)域,而 Tpen 則是用來在 Canvas 上畫線。Tbrush 的 Style 屬性有 bsHorizontal、bsVertical、bsFDiagonal、bsBDiagonal、bsCross、bsDiagCross幾種,分別代表實心、透明、水平線、垂直線、左上到右下的斜線,左下到右上的斜線、垂直交叉線、對角交叉線這幾種填充方案。其中 bsClear 為默認(rèn)值

11、。Tbrush 的 Color 屬性設(shè)定與 Pen 的 Color 屬性相一致。6. 常用的繪圖函數(shù)1)Canvas-MoveTo(intX,intY);函數(shù)用法:MoveTo 是用以在使用 LineTo 之前設(shè)定畫筆位置。使用此函數(shù)和直接設(shè)定Canvas 的 PenPos 屬性的效果相同。2)Canvas-LineTo(intX,intY);函數(shù)用法:LineTo 函數(shù)用來從畫筆位置畫一條至(X,Y)點的直線,此直線不包含(X,Y)點,同時將畫筆位置移至(X,Y)。所畫的直線形狀與 Pen 的屬性一致。3)Canvas-Ellipse(intX1,intY1,intX2,intY2);函數(shù)用

12、法:利用 Ellipse 可在 Canvas 上畫出圓形或橢圓形。其環(huán)繞矩形的左上角坐標(biāo)為(XI,Y1)而右下角坐標(biāo)為(X2,Y2)。若該矩形為正方形,則所繪圖形為圓形。當(dāng)此橢圓形繪制時,使用 Pen 的值畫出其外框,而使用 Brush 值填滿其內(nèi)部。34) Canvas-Rectangle(intX1,intY1,intX2,intY2)函數(shù)用法:在 Canvas 上畫出一矩形。其矩形的左上角坐標(biāo)為(XI,Y1),而右下角坐標(biāo)為(X2,Y2),矩形內(nèi)部的填充效果根據(jù)畫刷的類型確定。5)Canvas-Refresh()函數(shù)用法:清除畫布。1.2 實例制作用鼠標(biāo)隨意作圖1.程序設(shè)計思路所謂在窗體

13、上任意作圖,就是要用鼠標(biāo)在窗體上彈起彈落來確定所要畫圖形的起始位置,并設(shè)定好 Pen 和 Brush 的各種屬性,可在窗體上繪制直線、矩形、橢圓等圖形。2.程序?qū)崿F(xiàn)步驟(1)打開 C+Builder,生成一個新的應(yīng)用程序,在工程中加入的組件如表1 所示。ok工程中加入的組件及其屬性bow.nbo設(shè)置好的程序界面如圖 1 所示w.co圖 1ok程序界面4eto.nwwetetokcnetok.cokcn(2)定義全局變量:intsort,ox,oy;/sort 代表要繪制圖形的類別,ox、oy去時的坐標(biāo)位置(3)在生成窗體事件中初始化 sort,編寫代碼如下:void_fastcallTForm

14、1:FormCreate(TObject*Sender)sort=0;/表示不繪制圖形表示鼠標(biāo)按下4)設(shè)定畫筆的寬度、顏色、形狀。編寫代碼如下:void_fastcallTForm1:Button6Click(TObject*Sender)if(ColorDialog1-Execute()TColorpencolor;Canvas-Pen-Color=ColorDialog1-Color;/設(shè)定畫筆顏色void_fastcallTForm1:RadioButton1Click(TObject*Sender)Canvas-Pen-Style=psSolid;/設(shè)定畫筆為實線void_fastca

15、llTForm1:RadioButton2Click(TObject*Sender)Canvas-Pen-Style=psDash/設(shè)定畫筆為破折線void_fastcallTForm1:RadioButton3Click(TObject*Sender)Canvas-Pen-Style=psDot;/設(shè)定畫筆為點線void_fastcallTForm1:RadioButton4Click(TObject*Sender)Canvas-Pen-Style=psDashDot;/設(shè)定畫筆為點線+破void_fastcallTForm1:Edit1Change(TObject*Sender)Canva

16、s-Pen-Width=StrToInt(Edit1-Text);/設(shè)定線寬(5) 設(shè)定畫刷的顏色、形狀,編寫代碼如下:void_fastcallTForm1:Button7Click(TObject*Sender)if(ColorDialog1-Execute()折線TColorpencolor;Canvas-Brush-Color=ColorDialog1-Color;/設(shè)定畫刷的顏色void_fastcallTForm1:RadioButton5Click(TObject*Sender)Canvas-Brush-Style=bsSolid;/設(shè)定畫刷為實心5okcnvoid_fastca

17、llTForm1:RadioButton6Click(TObject*Sender)Canvas-Brush-Style=bsClear;void_fastcallTForm1:RadioButton7Click(TObject*Sender)/設(shè)定畫刷為透明Canvas-Brush-Style=bsHorizontal;/設(shè)定畫刷為水平填充void_fastcallTForm1:RadioButton8Click(TObject*Sender)Canvas-Brush-Style=bsVertical;/設(shè)定畫刷為垂直填充(6)確定下一步是畫橢圓、畫直線、畫矩形、清屏還是終止繪圖,編寫如下的

18、代碼:void_fastcallTForm1:Button1Click(TObject*Sender)sort=0;void_fastcallTForm1:Button2Click(TObject*Sender)sort=1;void_fastcallTForm1:Button4Click(TObject*Sender)sort=2;void_fastcallTForm1:Button3Click(TObject*Sender)sort=3;void_fastcallTForm1:Button5Click(TObject*Sender)Canvas-Refresh();(7)記錄下鼠標(biāo)在窗體上

19、按下的坐標(biāo),即確定所要畫圖形的起始位置,編寫如下的代碼:6void_fastcallTForm1:FormMouseDown(TObject*Sender,TMouseButtonButton,TShiftStateShift,intX,intY)ox=X;oy=Y;(8)編寫鼠標(biāo)在彈起時程序所要做的工作,編寫如下的代碼:void_fastcallTForm1:FormMouseUp(TObject*Sender,TMouseButtonButton,TShiftStateShift,intX,intY)switch(sort)case1:Canvas-MoveTo(ox,oy);Canvas

20、-LineTo(X,Y);okcnbreak;case2:Canvas-Rectangle(ox,oy,X,Y);break;case3:Canvas-Ellipse(ox,oy,X,Y);break;(9)程序編譯運行,可在窗體上隨意畫出各種圖形組合,如圖 2 所示ww.nbo圖 2 程序運行結(jié)果圖3.程序分析與說明.n本例所畫的圖形在窗體重新調(diào)整大小時都自動消失,這是因為程序沒有在FormPaint 事件中繪圖。在 FormPaint 事件中繪制的圖形不會在窗體調(diào)整時自動消失。2 彩色圖變黑白圖2.1 知識要點1. Image 組件Image 組件用來裝載圖像文件和在程序中顯示圖像Imag

21、e 組件位于Additional 組,該組件在模板中的位置如圖 3 所示(圖中提示信息上方的按鈕)。圖 3et 組件 okImage 的屬性包括 Canvas(畫布),用法如同 1 節(jié)知識要點所介紹。此外,它還有別的常用屬性,如表 2 所示。表 2Image 組件的常用屬性wwImage 的函數(shù):ww.cImageokcnLoadFromFile(Stringfilename)函數(shù)用法:LoadFromFile 是將圖形文件加載到 Image 組件中。例如要將C盤image文件夾中名為imagel.bmp的圖形文件加入到Imagel組件,可在程序中加入如下代碼:Imagel-Picture-L

22、oadFromFile(C:imageimagel.bmp);2. GetRValue、GetBValue 和 GetGValue這三個 API 函數(shù)是用來在顏色值中析取紅、綠、藍(lán)的強度值,分別返回一個0255 的亮度值。函數(shù)原型:BYTEGetRValue(TColorcolor);BYTEGetGValue(TColorcolor);BYTEGetBValue(TColorcolor);使用范例:BYTEnRed,nBlue,nGreen;TColorcolor=RGB(4,34,253);nRed=GetRValue(color);nGreen=GetGValue(color)nBlue

23、=GetBValue(color)結(jié)果說明:nRed=4;nBlue=34;nGreen=253;3. ScanLineC+Builder 提供了 ScanLine 處理技術(shù)讀取整行的像素顏色值,提高了圖像處理的速度。使用范例:Graphics:TBitmap*bitmap1;Byte*newscan;newscan=static_cast(bitmap1-ScanLine0);/newscan 指向位圖 bitmapl 的第 1 行所有像素點的顏色值參數(shù)說明:Tbitmap 是位圖類,封裝了許多進(jìn)行圖像處理的屬性和方法,其中包括了Canvas 屬性和 ScanLine方法。2.2 實例制作逐

24、點實現(xiàn)彩色圖變成黑白圖1.程序設(shè)計思路8先用 Image 組件將圖像裝載進(jìn)來。 從左到右, 從上到下, 使用 Image 的 Canvas的 Pixels 屬性逐點取得每一個像素點的 color 值,然后使用 GetRValue、GetBValue 和GetGValue 函數(shù)析取紅綠藍(lán)的強度值,加以平均,即紅、綠、藍(lán)的強度值一樣。將新的顏色值再賦給 Image的每一點的 Pixels 屬性,即將彩色圖變成黑白圖。2.程序?qū)崿F(xiàn)步驟(1)打開 C+Builder,生成一個新的應(yīng)用程序。往窗體中加入的組件如表 3 所示。表 3 窗體中加入的組件及其屬性okcn續(xù)表 3etetok設(shè)置好的程序界面如圖

25、 4 所示。w.etetok圖 4 設(shè)置好的程序界面(2)在 Unit7_1.cpp 開頭部分定義全局變量:Graphics:TBitmap*bitmap1;Graphics:TBitmap*bitmap2;intx,y;/x 存放圖像的寬度,y 存放圖像的高度(3)編寫單擊 Button1 的 OnClick 事件,實現(xiàn)裝載圖片到 Image1 中(目前Image 裝載的是 Bmp圖片,4 節(jié)會介紹如何裝載顯示 jpeg 圖片)。編寫如下代碼:void_fastcallTForm1:Button1Click(TObject*Sender)bitmap1=newGraphics:Tbitmap

26、;bitmap2=newGraphics:Tbitmap;Stringopenname,extension;if(OpenPictureDialog1-Execute()openname=OpenPictureDialog1-FileName;extension=openname.SubString(openname.Length()-2,3);Image1-Picture-LoadFromFile(openname);if(LowerCase(extension)=bmp)/如果是 Bmp 圖片bitmap1-LoadFromFile(openname);bitmap2-LoadFromFi

27、le(openname);x=bitmap1-Width;y=bitmap1-Height;bitmap1-PixelFormat=pf24bit;bitmap2-PixelFormat=pf24bit;Image1-Picture-Bitmap-Assign(bitmap1);(4)編寫單擊 Button2 的 OnClick 事件,實現(xiàn)彩色圖變成黑白圖。編寫如下代碼:void_fastcallTForm1:Button2Click(TObject*Sender)intrgb,i,j,r,g,b;TColorcolor;for(i=0;iWidth;i+)for(j=0;jHeight;j+

28、)9ookcncolor=Image1-Canvas-Pixelsij;r=GetRValue(color)g=GetGValue(color)b=GetBValue(color);rgb=(r+g+b)/3;Image1-Canvas-Pixelsij=RGB(rgb,rgb,rgb);(5)保存編譯運行,2.3 節(jié)還會繼續(xù)用到這個工程文件。3.程序分析與說明逐點實現(xiàn)彩色圖變成黑白圖,方法非常簡單,易用,但是非常費時,所以程序運行時,盡量選取字節(jié)比較小的圖片文件來進(jìn)行處理。2.3 實例制作用 ScanLine 方法實現(xiàn)彩色圖快速變黑白圖1. 程序設(shè)計思路(1)將圖像裝載到 bitmap 位圖

29、中,從上到下,使用 ScanLine 處理技術(shù)逐行讀取像素顏色值。(2)使用 GetRValue、GetGValue 和 GetBValue 函數(shù)析取紅綠藍(lán)的強度值,加以平均。(3)使用 ScanLine 處理技術(shù),逐行將新的顏色值賦給 bitmap 位圖。2. 程序?qū)崿F(xiàn)步驟(1)打開本文2.2 節(jié)中保存的工程文件, 編寫單擊Button3 的OnClick事件,實現(xiàn)彩色圖快速變成黑白圖。編寫如下代碼:void_fastcallTForm1:Button3Click(TObject*Sender)Byte*ptr,*newscan;Byter,g,b,bgr;bitmap1-Assign(Im

30、age1-Picture-Graphic);for(inti=0;iy;i+)/y 為位圖的高度ptr=static_cast(bitmap1-ScanLinei);newscan=static_cast(bitmap2-ScanLinei);for(intj=0;jPicture-Bitmap-Assign(bitmap2);(2)編譯運行程序,單擊 Buttonl 選取一個 Bmp 圖片,再單擊 Button3,彩色圖能夠快速變成黑白圖。3. 程序分析與說明要進(jìn)行快速的圖像處理,幾乎都離不開 ScanLine 技術(shù)。而用 ScanLine 技術(shù)取得的 bitmap 每行的顏色,其存放順序是

31、從左到右,每一點的藍(lán)色、綠色、紅色的亮度值,而不是紅色、綠色、藍(lán)色的次序,這一點要特別注意。10ookcn3 實現(xiàn)圖像的特殊顯示效果3.1 知識要點1.Sleep 函數(shù)Sleep 函數(shù)是系統(tǒng)的 API 函數(shù)庫里提供的時間延遲函數(shù)。延遲在程序設(shè)計中非常有意義?,F(xiàn)在的計算機系統(tǒng),完成一個 for 循環(huán):for(inti=0;i10000;i+)j=j+1;可能也只是在一瞬間就完成了。而在實現(xiàn)圖像的特殊顯示效果時,需要在一個過程的完成后,等待一定的時間,才運行程序下面的代碼,這時就要使用到時間的延遲了。Sleep 函數(shù)只有一個整型參數(shù) cMilliseconds,用來指定需要延遲的時間,它的單位是毫

32、秒。例如在程序中加入下面的代碼:ShowMessage(現(xiàn)在開始計時);Sleep(3000);/延遲三秒ShowMessage(延遲了三秒!);程序運行時在彈出“現(xiàn)在開始計時”的對話框后, 程序在延遲了三秒鐘的時間后,才彈出“延遲了三秒!”對話框。2.rand()、random()、Randomize()這三個隨機函數(shù)是用來產(chǎn)生一個隨機數(shù)。intrand()函數(shù),它返回一個不大于 RAND_MAX 的隨機數(shù)。RAND_MAX 是能夠產(chǎn)生的最大隨機數(shù)。intrandom(intnum);它返回一個不大于 num 的隨機數(shù)。Randomize(intNumber);為產(chǎn)生一個隨機數(shù),應(yīng)先執(zhí)行 R

33、andomize 來初始化隨機數(shù)生成器。其中 Number 參數(shù)是可選的,是變量或任何有效的數(shù)值表達(dá)式。Randomize 用Number 將 rand 函數(shù)的隨機數(shù)生成器初始化。如果省略 Number,則用系統(tǒng)計時器返回的值作為新的種子值。如果沒有使用 Randomize,則無參數(shù)的 Rand 函數(shù)將使用第一次調(diào)用 Rand 函數(shù)時的種子值。在使用隨機函數(shù)時,必須加入stdlib.h和stdio.h兩個頭文件。比如有這么一段程序代碼:intmax=RAND_MAX;Randomize();intx=255*rand()/max;inty=random(100);則 x 的取值介于 0255

34、之間,y 的取值介于 099 之間。3.2 實例制作圖像淡入淡出效果1.程序設(shè)計思路圖像淡入效果就是在一幅圖像裝載到 Image 組件后, 將圖像各像素點的顏色值都置為黑色,再逐步均勻的增加圖像各像素點的顏色值,直到恢復(fù)為原圖。在這每一步中,都加入一定的時間延遲,以實現(xiàn)程序中圖像淡入的效果。圖像淡出效果則與之相反,即逐步均勻的減少圖像各像素點的顏色值,直到圖像各像素點的顏色值都變?yōu)楹谏?.程序?qū)崿F(xiàn)步驟(1)打開 C+Builder,生成一個新的應(yīng)用程序。往窗體中加入的組件如表4 所示。表 4 窗體中加入的組件及其屬性bocnwwet設(shè)置好的程序界面如圖 5 所示okcn.n.n 圖 5 設(shè)置

35、好的程序界面 book續(xù)表 ok(2) 在 Unit7_2.cpp 開頭部分,加入頭文件和定義全局變量:#include#includeGraphics:TBitmap*bitmap1;Graphics:TBitmap*bitmap2;Byte*ptr,*newscan;intx,y;(3) 在生成窗體事件中初始化 bitmapl、bitmap2,編寫如下代碼:void_fastcallTForm1:FormCreate(TObject*Sender)bitmap1=newGraphics:TBitmap();bitmap2=newGraphics:TBitmap();/生成 Tbitmap

36、類的實例(4) 編寫單擊 Button1 的 OnClick 事件,實現(xiàn)利用對話框,將圖形文件加載到 Image1 組件,12并取得 bitmap1 的長度和寬度。編寫如下代碼:void_fastcallTForm1:Button1Click(TObject*Sender)Stringopenname;if(OpenPictureDialog1-Execute()openname=OpenPictureDialog1-FileName;Image1-Picture-LoadFromFile(openname);bitmap1-LoadFromFile(openname);bitmap2-Loa

37、dFromFile(openname);bitmap1-PixelFormat=pf24bit;bitmap2-PixelFormat=pf24bit;x=bitmap1-Width;okcny=bitmap1-Height;(5)編寫單擊 Button2 的 OnClick 事件,使得 bitmapl 保持不變,經(jīng)過20 次均勻的變化,bitmap2里的值由 0 變?yōu)樵贾?。編寫如下代碼:void_fastcallTForm1:Button2Click(TObject*Sender)bitmap2-Assign(Image1-Picture-Graphic);bitmap1-Assign(I

38、mage1-Picture-Graphic);Byter,g,b,bgr;for(inti=0;iy;i+)newscan=static_cast(bitmap2-ScanLinei)for(intj=0;jPicture-Bitmap-Assign(bitmap2);/設(shè)置整幅圖為黑色for(intl=0;l20;l+)/L 的取值代表著像素顏色變化的次數(shù)for(inti=0;iy;i+)ptr=static_cast(bitmap1-ScanLinei);/bitmap1 保持不變newscan=static_cast(bitmap2-ScanLinei);for(intj=0;jPict

39、ure-Bitmap-Assign(bitmap2);Form1-Refresh();/窗體重畫Sleep(1000);/Imagel 每一次變化后程序停頓 1 秒鐘,以便觀測到圖像淡入的效果Image1-Picture-Bitmap-Assign(bitmap1);/恢復(fù)原圖(6)編寫單擊的 Button3 的 OnClick 事件,使 bitmapl 保持不變,經(jīng)過20 次均勻的變化,bitmap2里的值由原始值變?yōu)?0。編寫如下代碼:void_fastcallTForm1:Button3Click(TObject*Sender)bitmap2-Assign(Image1-Picture-Graphic);bitmap1-Assign(Image1-Picture-Graphic);Byter,g,b;for(intl=0;l20;l+)for(inti=0;iy;i+)13ookcnptr=static_cast(bitmap1-ScanLinei);newscan=static_cast(bitmap2-ScanLinei);f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論