程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi圖像轉換scanline屬性例子

Delphi圖像轉換scanline屬性例子

編輯:Delphi

Delphi scanline屬性例子,實現一些圖像處理的功能,比如原圖拷貝、加電視雪花、為圖片添加彩線、水平變幻反轉、雜色變幻反轉、灰度轉換、明暗度設置等效果,程序運行截圖如圖所示:

Delphi圖像處理的例子

vIEw source print? 01 unit Unit1; 02 interface 03 uses 04   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 05   ExtCtrls, StdCtrls,math, ComCtrls; 06 type 07   TForm1 = class(TForm) 08     Button1: TButton; 09     Image1: TImage; 10     Image2: TImage; 11     Label1: TLabel; 12     ListBox1: TListBox; 13     Button2: TButton; 14     Button3: TButton; 15     OpenDialog1: TOpenDialog; 16     SaveDialog1: TSaveDialog; 17     procedure Button1Click(Sender: TObject); 18     procedure Button3Click(Sender: TObject); 19     procedure Button2Click(Sender: TObject); 20   private 21     { Private declarations } 22   public 23     { Public declarations } 24   end; 25 var 26   Form1: TForm1; 27 implementation 28 {$R *.DFM} 29 procedure TForm1.Button1Click(Sender: TObject); 30 Const 31   MaxPixelCount = 32768; 32 Type 33   TRGBTripleArray =Array [0..MaxPixelCount-1Of TRGBTriple; 34   pRGBTripleArray = ^TRGBTripleArray; 35 var rowout,rowin:PByteArray; 36     i,j:integer; 37     bitmap:TBitmap; 38     star:cardinal; 39  begin 40 Image2.repaint; 41 star:=GetTickCount; 42 bitmap:=TBitmap.Create; 43 bitmap.Assign(Image1.Picture.Bitmap);   //為位圖賦與圖像對象 44 bitmap.width:=Image1.Picture.width; 45 bitmap.height:=Image1.Picture.height; 46 bitmap.PixelFormat:=pf24bit; 47 //對於24色位圖,寬度和高度不一定必須設置在pixelsformat之前, 48 //但待畫位圖的高度和寬度最好不要人為限定 49 For j := 0 To bitmap.Height-1 Do        //開始:控制圖象顯示的循環體; 50  Begin 51   RowOut:=Bitmap.Scanline[j];          //設置效果圖中的掃描線 52   RowIn :=Image1.Picture.Bitmap.Scanline[j]; 53   For i :=0 to 3*bitmap.width-1 Do      //乘以3是最後關鍵的傑作,當然也可以常識其他的數字; 54  Begin 55  Case ListBox1.ItemIndex Of 56    0:RowOut[i+4]:=Rowin[i];                //這裡的4也可改為其他的值,不同的整數值有不同的效果 57    1:RowOut[i+j]:=Rowin[i];                //j表示位圖的高度變量 58    2:rowout[i]:=rowin[3*bitmap.width-i];   //水平反轉,但顏色改變; 59    3:rowout[i]:=rowin[i]+RGB(122,64,0);    //少許雜色效果,RGB()中的值可以任意設置 60    4:rowout[i]:=Round((rowout[i]+rowout[i+1]+rowout[i+2])/3);  //三個臨近的點之和然後相除得到灰度轉換 61    5:rowout[i]:=Round((rowout[i+2]+rowout[i+4])/6);  //明暗度設置,關鍵是除數(6)的值,值越大,就越暗 62    6:rowout[i]:=rowout[i]-Random(100); 63     //彩色電視雪花效果,Random的值越大效果越明顯 64     //rowout[i]的I不能換成J,這樣會使圖象中有一根彩色斜直線; 65   end//---case結束 66   end//i循環結束 67 end;//j循環結束 68 Image2.Picture.Graphic:=bitmap;  //繪制效果圖 69 Image2.Canvas.Draw(0,0,bitmap); 70 form1.Caption :='Scanline的非凡效果------圖象的轉換時間是'+FloatToStr((GetTickCount-star)/1000)+'秒'; 71 end; 72 procedure TForm1.Button3Click(Sender: TObject); 73 begin 74 If SaveDialog1.Execute Then 75   Image2.Picture.Bitmap.SaveToFile(SaveDialog1.FileName);  //將效果圖保存 76 end; 77 procedure TForm1.Button2Click(Sender: TObject); 78 begin 79   If OpenDialog1.Execute Then 80    Begin 81    Image1.Picture.LoadFromFile(OpenDialog1.Filename);  //載入文件 82    Button1.Enabled:=True; 83    end 84   Else; 85 end; 86 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved