Bagikan melalui


Mengelola Status Objek Grafis

Kelas Graphics ini adalah inti dari GDI+. Untuk menggambar apa pun, Anda mendapatkan Graphics objek, mengatur propertinya, dan memanggil metodenya DrawLine, , DrawImageDrawString, dan seperangkatnya).

Contoh berikut memanggil DrawRectangle metode Graphics objek. Argumen pertama yang diteruskan ke DrawRectangle metode adalah Pen objek.

Dim graphics As Graphics = e.Graphics  
Dim pen As New Pen(Color.Blue) ' Opaque blue  
graphics.DrawRectangle(pen, 10, 10, 200, 100)  
Graphics graphics = e.Graphics;  
Pen pen = new Pen(Color.Blue);  // Opaque blue  
graphics.DrawRectangle(pen, 10, 10, 200, 100);  

Status Grafis

Objek Graphics melakukan lebih dari menyediakan metode menggambar, seperti DrawLine dan DrawRectangle. Objek Graphics juga mempertahankan status grafik, yang dapat dibagi menjadi kategori berikut:

  • Pengaturan kualitas

  • Transformasi

  • Wilayah kliping

Kualitas Pengaturan

Objek Graphics memiliki beberapa properti yang memengaruhi kualitas item yang digambar. Misalnya, Anda dapat mengatur TextRenderingHint properti untuk menentukan jenis antialisis (jika ada) yang diterapkan ke teks. Properti lain yang memengaruhi kualitas adalah SmoothingMode, , CompositingQualityCompositingMode, dan InterpolationMode.

Contoh berikut menggambar dua elipsis, satu dengan mode smoothing diatur ke AntiAlias dan satu dengan mode smoothing diatur ke HighSpeed:

Dim graphics As Graphics = e.Graphics  
Dim pen As New Pen(Color.Blue)  
  
graphics.SmoothingMode = SmoothingMode.AntiAlias  
graphics.DrawEllipse(pen, 0, 0, 200, 100)  
graphics.SmoothingMode = SmoothingMode.HighSpeed  
graphics.DrawEllipse(pen, 0, 150, 200, 100)  
Graphics graphics = e.Graphics;  
Pen pen = new Pen(Color.Blue);  
  
graphics.SmoothingMode = SmoothingMode.AntiAlias;  
graphics.DrawEllipse(pen, 0, 0, 200, 100);  
graphics.SmoothingMode = SmoothingMode.HighSpeed;  
graphics.DrawEllipse(pen, 0, 150, 200, 100);  

Transformasi

Objek Graphics mempertahankan dua transformasi (dunia dan halaman) yang diterapkan ke semua item yang digambar oleh objek tersebut Graphics . Setiap transformasi affine dapat disimpan dalam transformasi dunia. Transformasi affine termasuk penskalaan, memutar, mencerminkan, condong, dan menerjemahkan. Transformasi halaman dapat digunakan untuk penskalaan dan untuk mengubah unit (misalnya, piksel ke inci). Untuk informasi selengkapnya, lihat Mengoordinasikan Sistem dan Transformasi.

Contoh berikut mengatur transformasi Graphics dunia dan halaman objek. Transformasi dunia diatur ke rotasi 30 derajat. Transformasi halaman diatur sehingga koordinat yang diteruskan ke yang kedua DrawEllipse akan diperlakukan sebagai milimeter alih-alih piksel. Kode membuat dua panggilan identik ke DrawEllipse metode . Transformasi dunia diterapkan ke panggilan pertama DrawEllipse , dan kedua transformasi (dunia dan halaman) diterapkan ke panggilan kedua DrawEllipse .

Dim graphics As Graphics = e.Graphics  
Dim pen As New Pen(Color.Red)  
  
graphics.ResetTransform()  
graphics.RotateTransform(30) ' world transformation  
graphics.DrawEllipse(pen, 0, 0, 100, 50)  
graphics.PageUnit = GraphicsUnit.Millimeter ' page transformation  
graphics.DrawEllipse(pen, 0, 0, 100, 50)  
Graphics graphics = e.Graphics;  
Pen pen = new Pen(Color.Red);
  
graphics.ResetTransform();  
graphics.RotateTransform(30);                    // world transformation  
graphics.DrawEllipse(pen, 0, 0, 100, 50);  
graphics.PageUnit = GraphicsUnit.Millimeter;     // page transformation  
graphics.DrawEllipse(pen, 0, 0, 100, 50);  

Ilustrasi berikut menunjukkan dua elipsis. Perhatikan bahwa rotasi 30 derajat adalah tentang asal sistem koordinat (sudut kiri atas area klien), bukan tentang pusat elipsis. Perhatikan juga bahwa lebar pena 1 berarti 1 piksel untuk elips pertama dan 1 milimeter untuk elips kedua.

Illustration that shows two ellipses: rotation and pen width.

Wilayah Kliping

Objek Graphics mempertahankan wilayah kliping yang berlaku untuk semua item yang digambar oleh objek tersebut Graphics . Anda dapat mengatur wilayah kliping dengan memanggil SetClip metode .

Contoh berikut membuat wilayah berbentuk plus dengan membentuk gabungan dua persegi panjang. Wilayah tersebut ditetapkan sebagai wilayah Graphics kliping objek. Kemudian kode menggambar dua baris yang dibatasi untuk interior wilayah kliping.

Dim graphics As Graphics = e.Graphics  
  
' Opaque red, width 5  
Dim pen As New Pen(Color.Red, 5)  
  
' Opaque aqua  
Dim brush As New SolidBrush(Color.FromArgb(255, 180, 255, 255))  
  
' Create a plus-shaped region by forming the union of two rectangles.  
Dim [region] As New [Region](New Rectangle(50, 0, 50, 150))  
[region].Union(New Rectangle(0, 50, 150, 50))  
graphics.FillRegion(brush, [region])  
  
' Set the clipping region.  
graphics.SetClip([region], CombineMode.Replace)  
  
' Draw two clipped lines.  
graphics.DrawLine(pen, 0, 30, 150, 160)  
graphics.DrawLine(pen, 40, 20, 190, 150)  
Graphics graphics = e.Graphics;  
  
// Opaque red, width 5  
Pen pen = new Pen(Color.Red, 5);
  
// Opaque aqua  
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 180, 255, 255));
  
// Create a plus-shaped region by forming the union of two rectangles.  
Region region = new Region(new Rectangle(50, 0, 50, 150));  
region.Union(new Rectangle(0, 50, 150, 50));  
graphics.FillRegion(brush, region);  
  
// Set the clipping region.  
graphics.SetClip(region, CombineMode.Replace);  
  
// Draw two clipped lines.  
graphics.DrawLine(pen, 0, 30, 150, 160);  
graphics.DrawLine(pen, 40, 20, 190, 150);  

Ilustrasi berikut ini memperlihatkan garis yang diklip:

Diagram that shows the limited clip region.

Baca juga