Saturday, December 24, 2016

Bab 13. Visual Basic .NET Belajar Dari Contoh



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