Delphi scanline屬性例子,實現一些圖像處理的功能,比如原圖拷貝、加電視雪花、為圖片添加彩線、水平變幻反轉、雜色變幻反轉、灰度轉換、明暗度設置等效果,程序運行截圖如圖所示:
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
Button3Click(Sender: TObject);
19
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
TForm1
.
30
Const
31
MaxPixelCount =
32768
32
Type
33
TRGBTripleArray =
Array
[
0..
MaxPixelCount-
1
]
Of
TRGBTriple;
34
pRGBTripleArray = ^TRGBTripleArray;
35
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
width:=Image1
width;
45
height:=Image1
height;
46
PixelFormat:=pf24bit;
47
//對於24色位圖,寬度和高度不一定必須設置在pixelsformat之前,
48
//但待畫位圖的高度和寬度最好不要人為限定
49
For
j :=
0
To
Height-
Do
//開始:控制圖象顯示的循環體;
50
Begin
51
RowOut:=Bitmap
Scanline[j];
//設置效果圖中的掃描線
52
RowIn :=Image1
Bitmap
53
i :=
to
3
*bitmap
width-
//乘以3是最後關鍵的傑作,當然也可以常識其他的數字;
54
55
Case
ListBox1
ItemIndex
56
:RowOut[i+
4
]:=Rowin[i];
//這裡的4也可改為其他的值,不同的整數值有不同的效果
57
:RowOut[i+j]:=Rowin[i];
//j表示位圖的高度變量
58
2
:rowout[i]:=rowin[
width-i];
//水平反轉,但顏色改變;
59
:rowout[i]:=rowin[i]+RGB(
122
,
64
);
//少許雜色效果,RGB()中的值可以任意設置
60
:rowout[i]:=Round((rowout[i]+rowout[i+
]+rowout[i+
])/
//三個臨近的點之和然後相除得到灰度轉換
61
5
:rowout[i]:=Round((rowout[i+
6
//明暗度設置,關鍵是除數(6)的值,值越大,就越暗
62
:rowout[i]:=rowout[i]-Random(
100
63
//彩色電視雪花效果,Random的值越大效果越明顯
//rowout[i]的I不能換成J,這樣會使圖象中有一根彩色斜直線;
65
//---case結束
66
//i循環結束
67
//j循環結束
68
Graphic:=bitmap;
//繪制效果圖
69
Canvas
Draw(
,bitmap);
70
form1
Caption :=
'Scanline的非凡效果------圖象的轉換時間是'
+FloatToStr((GetTickCount-star)/
1000
)+
'秒'
71
72
73
74
If
SaveDialog1
Execute
Then
75
SaveToFile(SaveDialog1
FileName);
//將效果圖保存
76
77
78
79
OpenDialog1
80
81
Image1
LoadFromFile(OpenDialog1
Filename);
//載入文件
82
Button1
Enabled:=
True
83
84
Else
85
86
TIWRegion 是容器, 首先布局好它(們). 在空
Delphi實現乒乓球小游戲:在游戲編寫思路方面,主要分為
首先創建一個新的項目,然後向窗體上添加一個TQuery組
本例效果圖:代碼文件:unit Unit1;i
1.1 &
本例效果圖: 代碼文件:unit Unit1;inte