13.
Grafik dan Multimedia
Pengantar
Pada bab ini, akan dibahas mengenai
perangkat Visual Basic untuk menggambar bangun dua dimensi dan untuk
mengendalikan warna dan font. Visual Basic mendukung grafik agar programer
dapat memperbaiki aplikasi Windows secara visual. Bahasa ini memuat kapabilitas
penggambaran dari namespace System.Drawing
dan beberapa namespace lain yang membentuk GDI+ (Graphical Device Interface). GDI + merupakan antarmuka pemrograman
aplikasi (API, application programming
interface), yang menyediakan beberapa kelas untuk menciptakan grafik
vektor, memanipulasi font dan citra.
Gambar 13.1 menampilkan hirarki kelas System.Drawing, yang mencakup beberapa
struktur dan kelas grafik dasar yang dirangkum pada bab ini. Beberapa komponen
yang paling umum dijumpai berada di dalam namespace System.Drawing dan System.Drawing.Drawing2D.
Gambar 13.1 Struktur dan
kelas namespace System.Drawing
Kelas Graphics memuat beberapa metode yang dipakai untuk menggambar String, garis, kotak, dan bangun
lainnya pada sebuah Control. Semua
metode dari kelas Graphics tersebut
biasanya memerlukan sebuah objek Pen
atau Brush. Pen menggambar outline bangun; Brush
menggambar objek yang solid.
Struktur Color memuat berbagai properti Shared,
yang menetapkan warna untuk berbagai kompononen grafikal. Struktur ini juga
memuat beberapa metode yang bisa dimanfaatkan pengguna untuk menciptakan
warna-warna baru. Kelas FontFamily
memuat beberapa metode untuk mendapatkan informasi font.
Untuk menggambar pada Visual Basic,
pertama-tama Anda perlu memahami sistem koordinat GDI + (Gambar 13.2), sebuah
skema untuk mengidentifikasi setiap titik pada monitor. Secara default, pojok
kiri-atas sebuah komponen GUI (seperti Panel
atau Form) memiliki koordinat (0,
0). Sepasang koordinat memiliki koordinat x
(koordinat horisontal) dan koordinat y
(koordinat vertikal). Koordinat x
adalah jarak horisontal (ke kanan) dari pojok kiri-atas. Koordinat y adalah jawark vertikal (ke bawah) dari
pojok kiri-atas. Sumbu x
mendefinisikan setiap koordinat horisontal, dan sumbu y mendefinisikan setiap koordinat vertikal. Programer memposisikan
teks dan bangun pada monitor dengan menspesifikasi koordinat (x, y).
Unit koordinat diukur dalam piksel, yang merupakan unit resolusi terkecil pada
monitor penampil.
Gambar 13.2 Sistem
koordinat GDI+. Unit diukur dalam piksel
Kontrol
Color
Struktur Color mendefinisikan beberapa metode dan konstanta yang dipakai
untuk memanipulasi warna. Karena ia hanya melakukan beberapa operasi (khususnya
menyimpan bidang-bidang Shared), Color
diimplementasikan sebagai struktur, bukan sebagai kelas.
Setiap warna dapat diciptakan dari
kombinasi komponen alfa, merah, hijau, dan biru. Komponen-komponen ini disebut
dengan nilai-nilai ARGB. Keempat komponen ARGB adalah Byte yang merepresentasikan nilai-nilai integer di dalam rentang 0
sampai 255. Nilai alfa menentukan intesitas warna. Sebagai contoh, nilai alfa 0
menghasilkan warna yang transparan, sedangkan nilai 255 menghasilkan warna yang
kabur. Nilai alfa berada dalam rentang 0 dan 255. Komponen merah dalam RGB
mendefinisikan intensitas warna merah pada warna, komponen hijau mendefinisikan
intensitas warna hijau, dan komponen biru mendefinisikan intensitas warna biru.
Semakin besar nilainya, semakin tinggi pula intensitas warnanya. Visual Basic
memampukan programer dalam memilih 17 juta warna. Jika komputer tertentu tidak bisa
menampilkan semua warna tersebut, ia akan menampilkan warna terdekat. Gambar
13.3 mencantumkan beberapa konstanta warna terdefinisi, dan Gambar 13.4
mendeskripsikan beberapa metode dan properti Color.
Konstanta pada struktur Color (semuanya Public Shared)
|
Nilai RGB
|
Konstanta pada struktur Color (semuanya Public Shared)
|
Nilai RGB
|
Orange
Pink
Cyan
Magenta
Yellow
Black
|
255, 200, 0
255, 175, 175
0, 255, 255
255, 0, 255
255, 255, 0
0, 0, 0
|
White
Gray
DarkGray
Red
Green
Blue
|
255, 255, 255
28, 128, 128
64, 64, 64
255, 0, 0
0, 255, 0
0, 0, 255
|
Gambar 13.3 Konstanta Shared pada struktur Color dan nilai RGBnya
Properti dan metode struktur Color
|
Deskripsi
|
Metode
Shared FromArgb
Shared FromName
-----------------------
Properti
A
R
G
B
|
Menciptakan warna berdasarkan nilai
merah, hijau, dan biru yang diekspresikan sebagai Integer 0 sampai 255. Versi
teroverload dari metode ini dapat dipakai untuk menspesifikasi nilai alfa,
merah, hijau, dan biru.
Menciptakan warna dari sebuah nama,
yang dilewatkan sebagai sebuah String.
---------------------------------------------------------------------------------------------
Integer antara 0 dan
255, merepresentasikan komponen alfa.
Integer antara 0 dan
255, merepresentasikan komponen merah.
Integer antara 0 dan
255, merepresentasikan komponen hijau.
Integer antara 0 dan
255, merepresentasikan komponen biru.
|
Gambar 13.4 Anggota-anggota
struktur Color
Tabel pada Gambar 13.4 mendeskripsikan
dua pemanggilan metode FromArgb.
Salah satunya memerlukan tiga argumen Integer,
dan lainnya memerlukan empat argumen Integer
(semua nilai argumen harus dalam rentang 0 dan 255). Keduanya memerlukan
argumen Integer, yang menspesifikasi
intensitas merah, hijau, dan biru. Versi teroverload memerlukan empat argumen
dan memampukan pengguna untuk menspesifikasi alfa; versi tiga-argumen
mendefault alfa menjadi 255. Kedua metode menghasilkan sebuah objek Color, yang merepresentasikan
nilai-nilai yang ditentukan. Properti Color,
A, R, G, dan B menghasilkan Byte yang merepresentasikan nilai-nilai Integer 0 sampai 255, yang berkaitan dengan intensitas alfa, merah,
hijau, dan biru.
Programer menggambar bangun dan String menggunakan Brush dan Pen. Pen, yang berfungsi sama dengan pulpen,
dipakai untuk menggambar garis. Kebanyakan metode penggambar memerlukan sebuah
objek Pen. Konstruktor Pen teroverload dapat dipakai programer
untuk menspesifikasi warna dan lebar garis yang diinginkan. Namespace System.Drawing juga menyediakan koleksi
Pens.
Semua kelas yang diderivasi dari kelas
abstrak Brush mendefinisikan
objek-objek yang dipakai untuk mewarnai bangun grafikal (misalnya, konstruktor SolidBrush mengambil sebuah objek Color). Pada hampir semua metode Fill, Brush dipakai untuk mengisi ruang dengan warna, pola, atau citra.
Gambar 13.5 mencantumkan berbagai Brush
dan fungsinya.
Aplikasi pada kode 13.1
mendemonstrasikan beberapa metode yang dideskripsikan pada Gambar 13.4. Program
menampilkan dua persegi saling-tindih, memampukan pengguna untuk bereksperimen
dengan nilai-nilai warna dan nama-nama warna.
Properti dan metode struktur Color
|
Deskripsi
|
HatchBrush
LinearGradient-
Brush
SolidBrush
TextureBrush
|
Menggunakan brush persegi untuk
mengisi region dengan pola. Pola tersebut didefinisikan oleh anggota dari
enumerasi HatchStyle, warna
latar-depan, dan warna latar-belakang.
Mengisi region dengan campuran warna
secara gradual. Hal ini dispesifikasi dengan dua warna, sudut gradien, dan
lebar persegi atau dua titik.
Mengisi region dengan satu warna.
Didefinisikan oleh sebuah objek Color.
Mengisi region dengan mengulangi Image tertentu di sepanjang
permukaan.
|
Gambar 13.5 Kelas-kelas
yang menderivasi kelas Brush
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
' Kode 13.1:
MenampilkanWarna.vb
' Menggunakan berbagai
warna dalam Visual Basic.
Public Class
FrmWarna
Inherits
System.Windows.Forms.Form
' kotak teks masukan
Friend
WithEvents txtNamaWarna As
TextBox
Friend
WithEvents txtKotakHijau As
TextBox
Friend
WithEvents txtKotakMerah As
TextBox
Friend
WithEvents txtKotakAlfa As
TextBox
Friend
WithEvents txtKotakBiru As
TextBox
' menetapkan tombol warna
Friend
WithEvents cmdNamaWarna As
Button
Friend WithEvents cmdNilaiWarna As
Button
' label warna
Friend
WithEvents lblBiru As Label
Friend
WithEvents lblHijau As Label
Friend
WithEvents lblMerah As Label
Friend WithEvents lblAlfa As
Label
' kotak grup
Friend
WithEvents kotakNama As
GroupBox
Friend
WithEvents grupNilaiWarna As
GroupBox
' kode dibangkitkan oleh Visual Studio
.NET
' warna untuk persegi belakang
Private
mWarnaBelakang As Color = Color.Wheat
' warna untuk persegi depan
Private
mWarnaDepan As Color =
Color.FromArgb(100, 0, 0, 255)
' mendefinisikan-ulang metode Form
OnPaint
Protected
Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim
objekGrafik As Graphics =
e.Graphics ' mendapatkan grafik
Dim
brushTeks As SolidBrush = _
New SolidBrush(Color.Black) ' menciptakan brush teks
Dim
brush As SolidBrush = _
New SolidBrush(Color.White)
' menciptakan solid brush
' menggambar latar-belakang putih
objekGrafik.FillRectangle(brush, 4,
4, 275, 180)
' menampilkan nama warnaBelakang
objekGrafik.DrawString(mWarnaBelakang.Name, Me.Font, _
brushTeks, 40, 5)
' menetapkan warna brush dan
menampilkan persegi belakang
brush.Color = mWarnaBelakang
objekGrafik.FillRectangle(brush, 45,
20, 150, 120)
' menampilkan nilai-nilai Argb dari
warna depan
objekGrafik.DrawString("Alfa: " & mWarnaDepan.A
& _
" Merah: " & mWarnaDepan.R & " Hijau: " & mWarnaDepan.G _
& " Biru: " & mWarnaDepan.B, Me.Font, brushTeks, _
55, 165)
' menetapkan warna brush dan
menampilkan persegi depan
brush.Color = mWarnaDepan
objekGrafik.FillRectangle(brush, 65,
35, 170, 130)
End Sub ' OnPaint
' menangani event cmdColorValue
Private
Sub cmdNilaiWarna_Click(ByVal
sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
cmdNilaiWarna.Click
' mendapatkan warna latar depan dari
kotak teks
mWarnaDepan =
Color.FromArgb(txtKotakAlfa.Text, _
txtKotakMerah.Text,
txtKotakHijau.Text, txtKotakBiru.Text)
Invalidate() ' merefresh Form
End
Sub ' cmdNilaiWarna_Click
Private
Sub cmdNamaWarna_Click(ByVal
sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
cmdNamaWarna.Click
' menetapkan mWarnaBelakang menjadi
warna yang ditentukan
mWarnaBelakang =
Color.FromName(txtNamaWarna.Text)
Invalidate() ' merefresh Form
End
Sub ‘cmdNamaWarna_Click
End Class ‘FrmWarna
|
Gambar 13.6 Keluaran
program pada kode 13.1
Komponen GUI terdefinisi, ColorDialog, merupakan sebuah kotak
dialog yang bisa dipakai pengguna untuk menyeleksi sebuah palette dari
warna-warna yang tersedia. Ia juga menawarkan opsi dalam menciptakan warna
sendiri. Program pada kode 13.2 mendemonstrasikan kegunaan dialog semacam itu.
Ketika pengguna menyeleksi sebuah warna dan menekan OK, aplikasi akan mengambil pilihan pengguna tersebut melalui
properti Color pada ColorDialog.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
' Kode 13.2:
TampilWarnaKOmpleks.vb
' Mengubah warna latar dan
warna teks sebuah form.
Imports
System.Windows.Forms
Public Class
FrmUjiColorDialog
Inherits
System.Windows.Forms.Form
Friend
WithEvents cmdTombolLatar As
Button
Friend
WithEvents cmdTombolTeks As
Button
' kode yang dibangkitkan oleh Visual
Studio .NET
' mengubah warna teks
Private
Sub cmdTombolTeks_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdTombolTeks.Click
' menciptakan objek ColorDialog
Dim
kotakTeks As ColorDialog = New ColorDialog()
Dim
hasil As DialogResult
' mendapatkan hasil yang dipilih
hasil = kotakTeks.ShowDialog()
If
hasil = DialogResult.Cancel Then
Return
End
If
' menugaskan warna latar-depan
menjadi hasil dialog
cmdTombolLatar.ForeColor =
kotakTeks.Color
cmdTombolTeks.ForeColor =
kotakTeks.Color
End
Sub ' cmdTombolTeks_Click
' mengubah warna latar-belakang
Private
Sub cmdTombolLatar_Click( _
ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) _
Handles
cmdTombolLatar.Click
' menciptakan objek ColorDialog
Dim
kotakWarna As ColorDialog = New ColorDialog()
Dim
hasil As DialogResult
' menampilkan ColorDialog dan
mendapatkan hasilnya
kotakWarna.FullOpen = True
hasil = kotakWarna.ShowDialog()
If
hasil = DialogResult.Cancel Then
Return
End
If
' menetapkan warna latar-belakang
Me.BackColor = kotakWarna.Color
End
Sub ' cmdTombolLatar_Click
End Class ' FrmUjiColorDialog
|
Gambar 13.7 Keluaran
program pada kode 13.2
Kontrol
Font
Bagian ini mengintroduksi beberapa
metode dan konstanta yang berkaitan dengan kontrol Font. Setelah sebuah Font
diciptakan, propertinya tidak dapat dimodifikasi. Jika programer memerlukan
Font yang berbeda, ia harus menciptakan objek Font yang baru. Beberapa properti kelas Font dicantumkan pada Gambar 13.8.
Properti
|
Deskripsi
|
Bold
FontFamily
Height
Italic
Name
Size
SizeInPoints
Strikeout
Underline
|
Menguji sebuah font apakah bergaya
tebal. Menghasilkan True jika font
tebal.
Merepresentasikan FontFamily dari Font (sebuah struktur terkelompok untuk mengorganisir font dan
mendefinisikan propertinya).
Merepresentasikan tinggi font.
Menguji sebuah font apakah bergaya
miring. Menghasilkan True jika
font miring.
Merepresentasikan nama font sebagai
sebuah String.
Menghasilkan sebuah nilai Single yang mengindikasikan ukuran
font sekarang, yang diukur dalam unit design.
Menghasilkan sebuah nilai Single yang mengindikasikan ukuran
font sekarang, yang diukur dalam unit point.
Menguji sebuah font apakah bergaya strikeout. Menghasilkan True jika font strikeout.
Menguji sebuah font apakah bergaya underline. Menghasilkan True jika font underline.
|
Gambar 13.8 Beberapa
properti kelas Font
Perhatikan bahwa properti Size menghasilkan ukuran font yang
diukur dalam unit design, sedangkan SizeInPoints
menghasilkan ukuran font dalam unit point (ukuran yang lebih umum).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
' Kode 13.3: Menggunakan Font.vb
' Demonstrasi berbagai pengaturan font.
Public Class FrmFont
Inherits System.Windows.Forms.Form
' kode dibangkitkan oleh
Visual Studio .NET
' demonstrate various font and
style settings
Protected Overrides Sub OnPaint( _
ByVal paintEvent As
PaintEventArgs)
Dim objekGrafik As
Graphics = paintEvent.Graphics
Dim brush As
SolidBrush = New
SolidBrush(Color.DarkBlue)
' arial, 12 pt tebal
Dim style As FontStyle
= FontStyle.Bold
Dim arial As Font = New Font( _
New
FontFamily("Arial"), 12,
style)
' times new roman, 12 pt
regular
style = FontStyle.Regular
Dim timesNewRoman As
Font = New Font( _
"Times New Roman", 12, style)
' courier new, 16 pt tebal
dan miring
style = FontStyle.Bold Or
FontStyle.Italic
Dim courierNew As Font
= New Font("Courier New", _
16, style)
' tahoma, 18 pt strikeout
style =
FontStyle.Strikeout
Dim tahoma As Font = New Font("Tahoma", 18, style)
objekGrafik.DrawString(arial.Name & " 12 point tebal.", _
arial, brush, 10, 10)
objekGrafik.DrawString(timesNewRoman.Name & _
" 12 point plain.", timesNewRoman,
brush, 10, 30)
objekGrafik.DrawString(courierNew.Name & _
" 16 point tebal dan miring.",
courierNew, brush, 10, 54)
objekGrafik.DrawString(tahoma.Name & _
" 18 point strikeout.", tahoma,
brush, 10, 75)
End Sub ' OnPaint
End Class ' FrmFont
|
Gambar 13.9 Keluaran
program pada kode 13.3
Program pada kode 13.3 menampilkan teks
dalam empat font yang berbeda, masing-masing dengan ukuran yang berbeda.
Program menggunakan konstruktor Font
untuk menginisialisasi objek Font
(baris 17-29). Setiap pemanggilan terhadap konstruktor Font akan melewatkan nama font (misalnya, Arial, Times New Roman,
Courier New atau Tahoma) sebagai sebuah String,
ukurang font (sebuah Single), dan
objek FontStyle (style). Metode Graphics, DrawString,
dipakai untuk menetapkan dan menggambar teks pada lokasi yang diinginkan.
Perhatikan bahwa baris 14 menciptakan sebuah objek DarkBlue SolidBrush (brush), yang menyebabkan semua String digambar dengan brush tersebut.
Programer dapat mendefinisikan
informasi tentang metrik font, seperti height,
descent, ascent dan leading. Gambar
13.10 mengilustrasikan properti ini.
Kelas FontFamily mendefinisikan beberapa karakteristik yang umum dijumpai
pada sebuah grup yang memuat font-font berelasi. Kelas FontFamily menyediakan beberapa metode yang bisa dipakai untuk
menentukan metrik font, yang dicantumkan pada Gambar 13.11.
Gambar 13.10 Ilustrasi
metrik font
Program pada kode 13.4 memanggil metode
ToString untuk menampilkan metrik
dari dua font. Baris 21 menciptakan Font
arial dan menetapkannya menjadi
12-point font Arial. Baris 22 menggunakan properti FontFamily dari kelas Font
untuk mendapatkan objek arial. Baris
30-31 memanggil ToString untuk
menampilkan representasi String dari
font. Baris 33-47 kemudian menggunakan beberapa metode dari kelas FontFamily untuk menghasilkan
integer-integer yang menspesifikasi ascent,
descent, height, dan leading.
Baris 50-67 mengulangi proses ini untuk font sansSerif, sebuah objek Font
yang diderivasi dari FontFamily, MS
Sans Serif.
Properti
|
Deskripsi
|
GetCellAscent
GetCellDescent
GetEmHeight
GetLineSpacing
|
Menghasilkan sebuah Integer yang merepresentasikan ascent sebuah font sebagai ukuran
dalam unit design.
Menghasilkan sebuah Integer yang merepresentasikan descent sebuah font sebagai ukuran
dalam unit design.
Menghasilkan sebuah Integer yang merepresentasikan height sebuah font sebagai ukuran
dalam unit design.
Menghasilkan sebuah Integer yang merepresentasikan jarak
antara dua baris yang saling berdekatan, diukur dalam unit design.
|
Gambar 13.11 Beberapa metode
FontFamily yang menghasilkan
informasi metrik font
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
' Kode 13.4:
MenggunakanMetrikFont.vb
' Menampilkan informasi
metrik font.
Imports System
Imports System.Drawing
Imports
System.Drawing.Text
Public Class
FrmMetrikFont
Inherits
System.Windows.Forms.Form
' kode yang dibangkitkan oleh Visual
Studio .NET
Protected
Overrides Sub OnPaint( _
ByVal
paintEvent As PaintEventArgs)
Dim
objekGrafik As Graphics =
paintEvent.Graphics
Dim
brush As SolidBrush = New SolidBrush(Color.Red)
Dim
pen As Pen = New Pen(brush, Convert.ToSingle(2.5))
' metrik font Arial
Dim
arial As Font = New Font("Arial", 12)
Dim
family As FontFamily =
arial.FontFamily
Dim
sanSerif As Font = New Font("Microsoft Sans Serif", _
14, FontStyle.Italic)
pen.Color = brush.Color
brush.Color = Color.DarkBlue
' menampilkan metrik font Arial
objekGrafik.DrawString("Font sekarang: " &
arial.ToString, _
arial, brush, 10, 10)
objekGrafik.DrawString("Ascent: " & _
family.GetCellAscent(FontStyle.Regular), arial, brush, _
10, 30)
objekGrafik.DrawString("Descent: " & _
family.GetCellDescent(FontStyle.Regular), arial, brush, _
10, 50)
objekGrafik.DrawString("Height: " & _
family.GetEmHeight(FontStyle.Regular), _
arial, brush, 10, 70)
objekGrafik.DrawString("Leading: " & _
family.GetLineSpacing(FontStyle.Regular), arial, brush, _
10, 90)
' menampilkan metrik font Sans Serif
family = sanSerif.FontFamily
objekGrafik.DrawString("Font sekarang: " & _
sanSerif.ToString(), sanSerif, brush, 10,
130)
objekGrafik.DrawString("Ascent: " & _
family.GetCellAscent(FontStyle.Italic), _
sanSerif, brush, 10, 150)
objekGrafik.DrawString("Descent: " & _
family.GetCellDescent(FontStyle.Italic), sanSerif, _
brush, 10, 170)
objekGrafik.DrawString("Height: " &
family.GetEmHeight _
(FontStyle.Italic), sanSerif, brush, 10,
190)
objekGrafik.DrawString("Leading: " & _
family.GetLineSpacing(FontStyle.Italic),
sanSerif, _
brush, 10, 210)
End
Sub ' OnPaint
End Class ' FrmMetrikFont
|
Menggambar
Garis, Persegi, dan Oval
Bagian ini akan menyajikan pelbagai
metode Graphics untuk menggambarkan
garis, persegi, dan oval. Setiap metode penggambar memiliki beberapa versi
teroverload. Ketika ingin menggambar outline bangun, Anda dapat menggunakan
beberapa versi dari Pen dan empat Integer; ketika ingin menggambar bangun
solid, Anda dapat menggunakan beberapa versi dari Brush dan empat Integer.
Pada kedua instans, dua argumen Integer
pertama merepresentasikan koordinat-koordinat dari pojok kiri-atas bangun dan
dua argumen Integer terakhir
mengindikasikan lebar dan tinggi bangun. Gambar 13.13 mencantumkan beberapa
metode Graphics dan parameternya.
Gambar 13.12 Keluaran
program pada kode 13.4
Metode-metode Graphics dan penjelasannya
|
DrawLine(ByVal p As Pen, ByVal x1 As Integer, ByVal y1
As Integer,
ByVal x2 As Integer, ByVal y2 As Integer)
Menggambar sebuah garis (x1, y1) sampai (x2, y2).
Pen menentukan warna, gaya, dan lebar garis.
DrawRectangle(ByVal p As Pen, ByVal x As Integer, ByVal y
As Integer,
ByVal lebar As Integer, ByVal tinggi As
Integer)
Menggambar sebuah persegi dengan lebar dan tinggi ditentukan. Pojok
kiri-atas persegi berada pada titik (x, y). Pen
menentukan warna, gaya, dan lebar tepi persegi.
FillRectangle(ByVal b As Brush, ByVal x As Integer, ByVal y
As
Integer, ByVal lebar As Integer, ByVal tinggi As
Integer)
Menggambar sebuah persegi terisi dengan lebar dan tinggi ditentukan.
Pojok kiri-atas persegi berada pada titik (x, y). Brush
menentukan pola pengisi di dalam persegi.
DrawEllipse(ByVal p As Pen, ByVal x As Integer, ByVal y
As Integer,
ByVal lebar As Integer, ByVal tinggi As
Integer)
Menggambar sebuah elips di dalam persegi. Lebar dan tinggi persegi
dispesifikasi, dan pojok kiri-atasnya berada pada titik (x, y).
Pen menentukan warna, gaya, dan lebar tepi elips.
FillEllipse(ByVal b As Brush, ByVal x As Integer, ByVal y
As Integer,
ByVal lebar As Integer, ByVal tinggi As
Integer)
Menggambar sebuah elips terisi di dalam persegi. Lebar dan tinggi
persegi dispesifikasi, dan pojok kiri-atasnya berada pada titik (x, y).
Brush menentukan pola pengisi di dalam elips.
|
Gambar 13.13 Beberapa metode
Graphics yang dipakai untuk
menggambar garis, persegi, dan oval
Aplikasi pada kode 13.5 menggambar
garis, persegi, dan elips. Pada aplikasi ini, juga akan didemonstrasikan
beberapa metode yang menggambarkan beberapa bangun terisi dan tak-terisi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
' Kode 13.5: GarisPersegiOval.vb
' Mendemonstrasikan penggambaran garis, persegi, dan oval.
Public Class FrmGambar
Inherits System.Windows.Forms.Form
' kode yang dibangkitkan oleh
Visual Studio .NET
' display ovals lines, and
rectangles
Protected Overrides Sub
OnPaint( _
ByVal paintEvent As
PaintEventArgs)
' mendapatkan objek
Graphics
Dim g As Graphics =
paintEvent.Graphics
Dim brush As
SolidBrush = New
SolidBrush(Color.Blue)
Dim pen As Pen = New Pen(Color.AliceBlue)
' menciptakan persegi
terisi
g.FillRectangle(brush, 90,
30, 150, 90)
' menggambar garis-garis
untuk menghubungkan persegi
g.DrawLine(pen, 90, 30,
110, 40)
g.DrawLine(pen, 90, 120,
110, 130)
g.DrawLine(pen, 240, 30,
260, 40)
g.DrawLine(pen, 240, 120,
260, 130)
' menggambar persegi atas
g.DrawRectangle(pen, 110,
40, 150, 90)
' menetapkan brush menjadi
merah
brush.Color = Color.Red
' menggambar elips dasar
g.FillEllipse(brush, 280,
75, 100, 50)
' menggambar garis-garis
penghubung
g.DrawLine(pen, 380, 55,
380, 100)
g.DrawLine(pen, 280, 55,
280, 100)
' menggambar outline elips
g.DrawEllipse(pen, 280,
30, 100, 50)
End Sub ' OnPaint
End Class ' FrmGambar
|
Gambar 13.14 Keluaran
program pada kode 13.5
Menggambar
Busur
Busur adalah bagian dari elips dan
diukur dalam derajat, diawali dengan sudut awal dan dilanjutkan sampa derajat
tertentu. Gambar 13.15 menampilkan dua busur. Salah satu dari kedua busur
tersebut memiliki sudut positif dan lainnya memiliki sudut negatif.
Gambar 13.15 Busur dengan
sudut positi dan sudut negatif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
' Kode 13.6:
MenggambarBusur.vb
' Menggambar busur pada
sebuah form.
Public Class FrmUjiBusur
Inherits
System.Windows.Forms.Form
' kode dibangkitkan oleh Visual Studio
.NET
Protected
Overrides Sub OnPaint( _
ByVal
paintEvent As PaintEventArgs)
' mendapatkan objek Graphics
Dim
objekGrafik As Graphics =
paintEvent.Graphics
Dim
persegi1 As Rectangle = New Rectangle(15, 35, 80, 80)
Dim
brush1 As SolidBrush = New SolidBrush(Color.Firebrick)
Dim
pen1 As Pen = New Pen(brush1, 1)
Dim
brush2 As SolidBrush = New
SolidBrush(Color.DarkBlue)
Dim
pen2 As Pen = New Pen(brush2, 1)
' berawal pada 0 dan sampai 360
derajat
objekGrafik.DrawRectangle(pen1,
persegi1)
objekGrafik.DrawArc(pen2, persegi1,
0, 360)
' berawal pada 0 dan sampai 110
derajat
persegi1.Location = New Point(100, 35)
objekGrafik.DrawRectangle(pen1,
persegi1)
objekGrafik.DrawArc(pen2, persegi1,
0, 110)
' berawal pada 0 dan sampai -270
derajat
persegi1.Location = New Point(185, 35)
objekGrafik.DrawRectangle(pen1,
persegi1)
objekGrafik.DrawArc(pen2, persegi1,
0, -270)
' berawal pada 0 dan sampai 360
derajat
persegi1.Location = New Point(15, 120)
persegi1.Size = New Size(80, 40)
objekGrafik.DrawRectangle(pen1,
persegi1)
objekGrafik.FillPie(brush2, persegi1,
0, 360)
' berawal pada 270 dan sampai -90
derajat
persegi1.Location = New Point(100, 120)
objekGrafik.DrawRectangle(pen1,
persegi1)
objekGrafik.FillPie(brush2, persegi1,
270, -90)
' berawal pada 0 dan sampai -270
derajat
persegi1.Location = New Point(185, 120)
objekGrafik.DrawRectangle(pen1,
persegi1)
objekGrafik.FillPie(brush2, persegi1,
0, -270)
End
Sub ' OnPaint
End Class
' FrmUjiBusur
|
Gambar 13.16 Keluaran
program pada kode 13.6
Beberapa metode Graphics yang dapat dipakai untuk menggambar busur, DrawArc, DrawPie, dan FillPie, dicantumkan
pada Gambar 13.17.
Metode-metode Graphics dan penjelasannya
|
DrawArc(ByVal p As Pen, ByVal x As Integer, ByVal y
As Integer,
ByVal lebar As Integer, ByVal tinggi As Integer,
ByVal sudutAwal As Integer, ByVal sudutAkhir
As Integer)
Menggambar sebuah elips, diawali dari sudut sudutAwal (dalam
derajat) dan sampai sudutAkhir. Elips didefinisikan oleh persegi yang
mengelilinginya dengan lebar w, tinggi h, dan pojok kiri-atas
(x, y). Pen menentukan warna, lebar, dan gaya batas busur.
DrawPie(ByVal p As Pen, ByVal x As Integer, ByVal y
As Integer,
ByVal lebar As Integer, ByVal tinggi As Integer,
ByVal sudutAWal As Integer, ByVal sudutAkhir As
Integer)
Menggambar bagian pie dari sebuah elips, diawali dari sudut sudutAwal
(dalam derajat) dan sampai sudutAkhir. Elips didefinisikan oleh
persegi yang mengelilinginya dengan lebar w, tinggi h, dan
pojok kiri-atas (x, y). Pen menentukan warna, lebar, dan gaya batas
busur.
FillPie(ByVal b As Brush, ByVal x As Integer, ByVal y
As Integer,
ByVal lebar As Integer, ByVal tinggi As Integer,
ByVal sudutAWal As Integer, ByVal sudutAkhir As
Integer)
Berfungsi sama dengan DrawPie, kecuali bahwa ia menggambar busur
terisi. Brush menentukan pola pengisi busur terisi tersebut.
|
Gambar 13.17 Beberapa metode
Graphics yang dipakai untuk
menggambar busur
Menggambar
Polygone dan Polyline
Ada beberapa metode Graphics yang bisa dipakai untuk
menggambar polygon: DrawLines
menggambar deretan nilai terkoneksi, DrawPolygon
menggambar polygon tertutup, dan FillPolygon
menggambar polygon terisi. Ketiga metode tersebut dicantumkan pada Gambar
13.18. Program pada kode 13.7 dapat dipakai pengguna untuk menggambar polygon
dan garis-garis terkoneksi menggunakan metode-metode pada Gambar 13.18.
Metode
|
Deskripsi
|
DrawLines
DrawPolygon
FillPolygon
|
Menggambar beberapa garis terkoneksi.
Koordinat tiap titik dispesifikasi di dalam sebuah array yang memuat
objek-objek Point. Jika titik
terakhir berbeda dari titik pertama, maka gambar adalah bangun terbuka.
Menggambar sebuah polygon. Koordinat
tiap titik dispesifikasi di dalam sebuah array yang memuat objek-objek Point. Metode ini menggambar polygon
tertutup, bahkan jika titik terakhir berbeda dari titik pertama.
Menggambar sebuah poligon terisi.
Koordinat tiap titik dispesifikasi di dalam sebuah array yang memuat
objek-objek Point. Metode ini
menggambar polygon tertutup, bahkan jika titik terakhir berbeda dari titik
pertama.
|
Gambar 13.18 Beberapa metode
Graphics untuk menggambar polygon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
' Kode 13.7:
MenggambarPolygon.vb
' Demonstrasi penggambaran
polygon.
Public Class
FrmPolygon
Inherits
System.Windows.Forms.Form
' polygon type options
Friend
WithEvents radioPolygonTerisi As
RadioButton
Friend WithEvents radioGaris As RadioButton
Friend
WithEvents radioPolygon As
RadioButton
' command buttons
Friend
WithEvents cmdBersihkan As
Button
Friend
WithEvents cmdWarnaBaru As
Button
Friend
WithEvents jendelaGambar As
Panel
Friend
WithEvents grupTipe As
GroupBox
' kode yang dibangkitkan oleh Visual
Studio .NET
' memuat daftar titik polygon
Private
mTitik As ArrayList = New ArrayList()
' menginisialisasi pen dan brush default
Dim
mPen As Pen = New
Pen(Color.DarkBlue)
Dim
mBrush As SolidBrush = New
SolidBrush(Color.DarkBlue)
' event handler untuk mouse pada panel
Private
Sub jendelaGambar_MouseDown(ByVal
sender _
As
Object, ByVal e As
_
System.Windows.Forms.MouseEventArgs)
_
Handles
jendelaGambar.MouseDown
' Menambah posisi mouse pada daftar
verteks
mTitik.Add(New Point(e.X, e.Y))
jendelaGambar.Invalidate() ' refresh
panel
End
Sub ' jendelaGambar_MouseDown
' event handler untuk menggambar pada
panel
Private
Sub jendelaGambar_Paint(ByVal
sender As System.Object, _
ByVal
e As System.Windows.Forms.PaintEventArgs) _
Handles
jendelaGambar.Paint
' mendapatkan objek grafik untuk
panel
Dim
objekGrafik As Graphics =
e.Graphics
' jika arraylist memiliki 2 atau
lebih titik, tampilkan bangun
If
mTitik.Count > 1 Then
' mendapatkan array untuk
digunakan pada fungsi-fungsi penggambar
Dim arrayTitik() As
Point = _
mTitik.ToArray(mTitik(0).GetType())
If radioPolygon.Checked Then
' menggambar polygon
objekGrafik.DrawPolygon(mPen,
arrayTitik)
ElseIf radioGaris.Checked Then
' menggambar garis
objekGrafik.DrawLines(mPen,
arrayTitik)
ElseIf radioPolygonTerisi.Checked Then ' menggambar polygon terisi
objekGrafik.FillPolygon(mBrush, arrayTitik)
End If
End
If
End
Sub ' jendelaGambar_Paint
' menangani event klik cmdBersihkan
Private
Sub cmdBersihkan_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdBersihkan.Click
mTitik = New ArrayList() ' menghapus titik-titik
jendelaGambar.Invalidate() ' refresh
panel
End
Sub ' cmdBersihkan_Click
' menangani event tombol radio polygon
CheckedChange
Private
Sub radioPolygon_CheckedChanged(ByVal
sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
radioPolygon.CheckedChanged
jendelaGambar.Invalidate() ' refresh
panel
End
Sub ' radioPolygon_CheckedChanged
' menangani event tombol radio garis
CheckedChange
Private
Sub radioGaris_CheckedChanged(ByVal
sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
radioGaris.CheckedChanged
jendelaGambar.Invalidate() ' refresh
panel
End
Sub ' radioGaris_CheckedChanged
' menangani event tombol radio polygon
terisi CheckedChange
Private
Sub radioPolygonTerisi_CheckedChanged(ByVal sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
radioPolygonTerisi.CheckedChanged
jendelaGambar.Invalidate() ' refresh
panel
End
Sub '
radioPolygonTerisi_CheckedChanged
' menangani event cmdWarnaBaru
Private
Sub cmdWarnaBaru_Click(ByVal
sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
cmdWarnaBaru.Click
' menciptakan dialog warna baru
Dim
kotakWarna As ColorDialog = New ColorDialog()
' menampilkan dialog dan mendapatkan
hasil
Dim
hasil As DialogResult =
kotakWarna.ShowDialog()
' kembali jika pengguna
membatalkannya
If
hasil = DialogResult.Cancel Then
Return
End If
mPen.Color = kotakWarna.Color '
menetapkan pen menjadi warna baru
mBrush.Color = kotakWarna.Color '
menetapkan brush menjadi warna baru
jendelaGambar.Invalidate() ' refresh
panel
End
Sub ' cmdWarnaBaru_Click
End Class ' FrmPolygon
|
Gambar 13.19 Keluaran
program pada kode 13.7
Kapabilitas
Grafik Lanjut
Visual Basic menawarkan beberapa
kapabilitas grafik lainnya. Hirarki Brush,
misalnya, juga mencakup HatchBrush, LiniearGradientBrush, PathGradientBrush, dan TextureBrush.
Program pada kode 13.8
mendemonstrasikan beberapa fitur grafik, seperti garis putus-putus, garis
tebal, dan kemampuan untuk mengisi pola. Hal itu hanya sedikit dari kapabilitas
namespace System.Drawing.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
' Kode 13.8:
MenggambarBangun.vb
' Menggambar berbagai
bangun pada sebuah form.
Imports
System.Drawing.Drawing2D
Public Class
FrmGambarBangun
Inherits
System.Windows.Forms.Form
' kode yang dibangkitkan oleh Visual
Studio .NET
' menggambar berbagai bangun pada sebuah
form
Protected
Overrides Sub OnPaint(ByVal e As PaintEventArgs)
' referensi ke objek yang akan
digunakan
Dim
objekGrafik As Graphics = e.Graphics
' brush untuk elips, persegi, dan
gradient
Dim
areaGambar1 As Rectangle = New Rectangle(5, 35, 30, 100)
Dim brushLinier As LinearGradientBrush = _
New
LinearGradientBrush(areaGambar1, Color.Blue,
_
Color.Yellow,
LinearGradientMode.ForwardDiagonal)
' pen dan lokasi untuk persegi merah
Dim
penMerahTebal As Pen = New Pen(Color.Red, 10)
Dim
areaGambar2 As Rectangle = New Rectangle(80, 30, 65, 100)
' tekstur bitmap
Dim
bitmapTekstur As Bitmap = New Bitmap(10, 10)
Dim
objekGrafik2 As Graphics = _
Graphics.FromImage(bitmapTekstur)
' mendapatkan grafik bitmap
' brush dan pen digunakan pada
program
Dim
brushWarnaSolid As SolidBrush = _
New SolidBrush(Color.Red)
Dim
penWarna As Pen = New
Pen(brushWarnaSolid)
' menggambar elips terisi dengan
gradient biru-kuning
objekGrafik.FillEllipse(brushLinier,
5, 30, 65, 100)
' menggambar persegi tebal merah
objekGrafik.DrawRectangle(penMerahTebal, areaGambar2)
' mengisi bitmapTekstur dengan kuning
brushWarnaSolid.Color = Color.Yellow
objekGrafik2.FillRectangle(brushWarnaSolid, 0, 0, 10, 10)
' menggambar persegi hitam kecil
dalam bitmapTekstur
penWarna.Color = Color.Black
objekGrafik2.DrawRectangle(penWarna,
1, 1, 6, 6)
' menggambar persegi biru kecil dalam
bitmapTekstur
brushWarnaSolid.Color = Color.Blue
objekGrafik2.FillRectangle(brushWarnaSolid, 1, 1, 3, 3)
' menggambar persegi merah kecil
dalam bitmapTekstur
brushWarnaSolid.Color = Color.Red
objekGrafik2.FillRectangle(brushWarnaSolid, 4, 4, 3, 3)
' menciptakan brush tekstur dan
menampilkan persegi tekstur
Dim
brushTekstur As TextureBrush = _
New TextureBrush(bitmapTekstur)
objekGrafik.FillRectangle( _
brushTekstur, 155, 30, 75, 100)
' menggambar busur bentuk-pie dalam putih
penWarna.Color = Color.White
penWarna.Width = 6
objekGrafik.DrawPie( _
penWarna, 240, 30, 75, 100, 0,
270)
' menggambar garis dalam hijau dan
kuning
penWarna.Color = Color.Green
penWarna.Width = 5
objekGrafik.DrawLine(penWarna, 395,
30, 320, 150)
' menggambar garis kuning putus-putus
penWarna.Color = Color.Yellow
penWarna.DashCap = LineCap.Round
penWarna.DashStyle = DashStyle.Dash
objekGrafik.DrawLine(penWarna, 320,
30, 395, 150)
End
Sub ' OnPaint
End Class ' FrmGambarBangun
|
Gambar 13.20 Keluaran
program pada kode 13.8
Pada baris 24, diciptakan sebuah objek Pen, pen. Kemudian Color.Red
dan argumen Integer 10 dilewatkan
kepada konstruktor pen,
mengindikasikan bahwa pen akan
dipakai untuk menggambar garis merah dengan lebar piksel 10.
Baris 28 menciptakan sebuah citra Bitmap yang baru, yang awalnya kosong.
Kelas Bitmap dapat menghasilkan
citra-citra warna dan keabuan; Bitmap
pada kasus ini berlebar 10 piksel dan memiliki tinggi 10 piksel. Metode FromImage (baris 29-30) adalah sebuah
anggota Shared dari kelas Graphics dan memperoleh objek Graphics yang berkaitan dengan sebuah Image, yang dapat dipakai untuk
menggambar pada sebuah citra. Baris 44-53 menggambar pola yang memuat
persegi-persegi hitam, biru, merah, dan kuning pada Bitmap. TextureBrush
adalah sebuah brush yang mengisi interior sebuah bangun dengan citra, bukan
dengan warna. Pada baris 63-64, objek TextureBrush,
brushTekstur, mengisi sebuah persegi
dengan Bitmap. Versi konstruktor TextureBrush yang dipakai mengambil
sebuah citra yang mendefinisikan teksturnya sebagai argumen.
Baris 79-80 memanfaatkan enumerasi System.Drawing.Drawing2D, DashCap dan DashStyle, untuk menggambarkan garis putus-putus diagonal. Baris 79
menetapkan properti DashCap pada pen
(berbeda dari enumerasi DashCap)
menjadi anggota dari enumerasi DashCap.
Enumerasi DashCap menspesifikasi
gaya (style) awal dan akhir sebuah
garis putus-putus.
Program pada kode 13.9 menggambar
beberapa bintang lima-titik dengan formasi tertentu. Baris 29 menetapkan awal
dari objek Graphics. Argumen untuk
metode TranslateTransform
mengindikasikan bahwa origin harus ditranslasi menjadi koordinat (150, 150).
Baris 20-23 mendefinisikan dua array Integer,
yang merepresentasikan koordinat x-y dari titik-titik pada bintang, dan
baris 26 mendefinisikan objek GraphicsPath,
bintang. Loop For kemudian menciptakan garis-garis untuk menghubungkan
titik-titik bintang dan menambahkan garis-garis pada bintang. Metode AddLine
dipakai untuk memberikan garis pada bangun. Argumen untuk AddLine menspesifikasi koordinat-koordinat titik-akhir baris; setiap
pemanggilan terhadap AddLine akan
menambahkan sebuah baris dari titik sebelumnya ke titik sekarang. Baris 38
menggunakan metode CloseFigure untuk
menyempurnakan bangun.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
' Kode 13.9:
GambarBintang.vb
' Menggunakan beberapa
path untuk menggambar beberapa bintang pada sebuah form.
Imports
System.Drawing.Drawing2D
Public Class
FrmGambarBintang
Inherits
System.Windows.Forms.Form
' kode yang dibangkitkan oleh Visual
Studio .NET
' menciptakan path dan menggambar bintang
di sepanjang path tersebut
Protected
Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim
objekGrafik As Graphics =
e.Graphics
Dim
i As Integer
Dim
acak As Random = New Random()
Dim
brush As SolidBrush = _
New SolidBrush(Color.DarkMagenta)
' titik-titik x dan y dari path
Dim
xTitik As Integer() = _
{55, 67, 109, 73, 83, 55, 27, 37,
1, 43}
Dim
yTitik As Integer() = _
{0, 36, 36, 54, 96, 72, 96, 54,
36, 36}
' menciptakan path grafik untuk
bintang
Dim
bintang As GraphicsPath = New GraphicsPath()
' translasi origin ke (150, 150)
objekGrafik.TranslateTransform(150,
150)
' menciptakan bintang dari sederet
titik
For
i = 0 To 8 Step 2
bintang.AddLine(xTitik(i),
yTitik(i), _
xTitik(i + 1), yTitik(i + 1))
Next
' menutub bangun
bintang.CloseFigure()
' merotasi origin dan menggambar
bintang dalam warna acak
For
i = 1 To 18
objekGrafik.RotateTransform(20)
brush.Color = Color.FromArgb(acak.Next(200,
255), _
acak.Next(255), acak.Next(255),
acak.Next(255))
objekGrafik.FillPath(brush,
bintang)
Next
End
Sub ' OnPaint
End Class ' FrmGambarBintang
|
Gambar 13. 21 Keluaran
program pada kode 13.9
Menampilkan
dan Menskala Citra
Kapabilitas multimedia Visual Basic
mencakup grafik, citra, animasi, dan video. Bagian-bagian sebelumnya telah
mendemonstrasikan beberapa kapabilitas grafik-vektor Visual Basic; bagian ini
akan berkonsentrasi pada manipulasi citra. Form Windows yang diciptakan pada
kode 13.10 mendemonstrasikan manipulasi sebuah Image (namespace System.Drawing).
Aplikasi dapat dipakai pengguna untuk menetapkan lebar dan tinggi Image sesuai yang diinginkan, yang
kemudian ditampilkan dalam ukuran tersebut.
1
2
3
4
5
6
7
|
' Kode 13.10:
TampilCitra.vb
' Menampilkan dan mengubah
ukuran suatu citra.
Public Class
FrmTampilGambar
Inherits
System.Windows.Forms.Form
' kontrol lebar
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
Friend
WithEvents txtLebar As TextBox
Friend
WithEvents lblLebar As Label
' kontrol tinggi
Friend WithEvents lblTinggi As
Label
Friend
WithEvents txtTinggi As
TextBox
Private
mObjekGrafik As Graphics
Private
mCitra As Image
‘ menetapkan variabel-variabel anggota
Private
Sub FrmTampilGambar_Load(ByVal
sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles
MyBase.Load
' mendapatkan objek grafik Form
mObjekGrafik = Me.CreateGraphics
' mengambil citra
mCitra = Image.FromFile("citra/Gambar.gif")
End
Sub ' FrmTampilGambar_Load
' kode yang dibangkitkan oleh Visual
Studio .NET
Private
Sub cmdTetapkan_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdTetapkan.Click
' mendapatkan masukan pengguna
Dim
lebar As Integer = Convert.ToInt32(txtLebar.Text)
Dim
tinggi As Integer = Convert.ToInt32(txtTinggi.Text)
' jika dimensi yang dispesifikasi
terlalu besar, tampilkan pesan
If
(lebar > 256 OrElse tinggi >
256) Then
MessageBox.Show("Tinggi atau Lebar terlalu besar")
Return
End If
mObjekGrafik.Clear(Me.BackColor) ' membersihkan Windows
Form
' menggambar citra
mObjekGrafik.DrawImage(mCitra, 5, 5,
lebar, tinggi)
End
Sub ' cmdTetapkan_Click
End Class ' FrmTampilGambar
|
Gambar 13. 22 Keluaran
program pada kode 13.10
Animasi
Sederet Citra
Program pada kode 13.11 menggunakan
sebuah PictureBox, yang memuat
citra-citra yang akan dianimasikan. Akan digunakan sebuah Timer untuk mensiklus citra-citra, yang menyebabkan sebuah citra
baru ditampilkan tiap 50 milidetik. Variabel hitung akan menjejak nomor citra dan bertambah setiap kali citra
baru ditampilkan. Array memuat 16 citra (dinomori 0 sampai 15); ketika aplikasi
meraih citra 15, ia kembali ke citra 0. Anda diminta untuk menempatkan semua
citra pada folder bin/Debug pada
projek.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
' Kode 13.11: AnimatorCitra.vb
' Program untuk menganimasi sederet citra.
Public Class FrmAnimatorCitra
Inherits System.Windows.Forms.Form
Private mCitra As
ArrayList = New ArrayList()
Private mHitung As
Integer = 1
Public Sub New()
MyBase.New()
' pemanggilan ini
diperlukan oleh Windows Form Designer.
InitializeComponent()
' mengambil semua citra
Dim i As Integer
For i = 0 To 15
mCitra.Add(Image.FromFile("citra/toba"
& i _
& ".gif"))
Next
' memuat citra pertama
kotakGambar.Image =
CType(mCitra(0), Image)
' menetapkan PictureBox
agar berukuran sama dengan Image
kotakGambar.Size =
kotakGambar.Image.Size
End Sub ' New
Friend WithEvents timer As
System.Windows.Forms.Timer
Friend WithEvents kotakGambar As _
System.Windows.Forms.PictureBox
' kode dibangkitkan oleh
Visual Studio .NET
Private Sub timer_Tick(ByVal
sender As System.Object, _
ByVal e As
System.EventArgs) Handles
timer.Tick
' menginkremen kounter
mHitung = (mHitung + 1) Mod 15
' memuat citra berikutnya
kotakGambar.Image =
CType(mCitra(mHitung), Image)
End Sub ' timer_Tick
End Class ' FrmAnimatorCitra
|
Gambar 13. 23 Keluaran
program pada kode 13.11
Latihan
1.
Tulislah sebuah program yang menggambarkan delapan
lingkaran. Masing-masing lingkaran terpisah 10 piksel. Gunakan metode DrawArc.
2.
Tulislah sebuah program yang menggambarkan 100
garis dengan panjang, posisi, ketebalan, dan warna yang acak.
3.
Tulislah sebuah program yang menggambarkan sebuah
piramida. Gunakan kelas GraphicsPath
dan metode DrawPath.
No comments:
Post a Comment