Bagikan melalui


Cara: Menggunakan Mode Interpolasi untuk Mengontrol Kualitas Gambar Selama Penskalaan

Mode Graphics interpolasi objek memengaruhi cara GDI+ menskalakan (meregangkan dan menyusutkan) gambar. Enumerasi InterpolationMode menentukan beberapa mode interpolasi, beberapa di antaranya diperlihatkan dalam daftar berikut:

Untuk meregangkan gambar, setiap piksel dalam gambar asli harus dipetakan ke sekelompok piksel dalam gambar yang lebih besar. Untuk menyusutkan gambar, grup piksel dalam gambar asli harus dipetakan ke satu piksel dalam gambar yang lebih kecil. Efektivitas algoritma yang melakukan pemetaan ini menentukan kualitas gambar yang diskalakan. Algoritma yang menghasilkan gambar berskala berkualitas lebih tinggi cenderung membutuhkan lebih banyak waktu pemrosesan. Dalam daftar sebelumnya, NearestNeighbor adalah mode kualitas terendah dan HighQualityBicubic merupakan mode berkualitas tertinggi.

Untuk mengatur mode interpolasi, tetapkan salah satu anggota InterpolationMode enumerasi ke InterpolationMode properti Graphics objek.

Contoh

Contoh berikut menggambar gambar lalu menyusutkan gambar dengan tiga mode interpolasi yang berbeda.

Ilustrasi berikut menunjukkan gambar asli dan tiga gambar yang lebih kecil.

Cuplikan layar yang memperlihatkan gambar dengan pengaturan interpolasi yang bervariasi.

Image image = new Bitmap("GrapeBunch.bmp");
int width = image.Width;
int height = image.Height;

// Draw the image with no shrinking or stretching.
e.Graphics.DrawImage(
    image,
    new Rectangle(10, 10, width, height),  // destination rectangle
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel,
    null);

// Shrink the image using low-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
e.Graphics.DrawImage(
   image,
    new Rectangle(10, 250, (int)(0.6 * width), (int)(0.6 * height)),
    // destination rectangle
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel);

// Shrink the image using medium-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;
e.Graphics.DrawImage(
    image,
    new Rectangle(150, 250, (int)(0.6 * width), (int)(0.6 * height)),
    // destination rectangle
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel);

// Shrink the image using high-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.DrawImage(
    image,
    new Rectangle(290, 250, (int)(0.6 * width), (int)(0.6 * height)),
    // destination rectangle
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel);
Dim image As New Bitmap("GrapeBunch.bmp")
Dim width As Integer = image.Width
Dim height As Integer = image.Height

' Draw the image with no shrinking or stretching. Pass in the destination
' rectangle (2nd argument), the upper-left corner (3rd and 4th arguments),
' width (5th argument),  and height (6th argument) of the source 
' rectangle.
e.Graphics.DrawImage( _
    image, _
    New Rectangle(10, 10, width, height), _
    0, _
    0, _
    width, _
    height, _
    GraphicsUnit.Pixel, _
    Nothing)

' Shrink the image using low-quality interpolation. 
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor

' Pass in the destination rectangle, and the upper-left corner, width, 
' and height of the source rectangle as above.
e.Graphics.DrawImage( _
image, _
New Rectangle(10, 250, CInt(0.6 * width), CInt(0.6 * height)), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

' Shrink the image using medium-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear

' Pass in the destination rectangle, and the upper-left corner, width, 
' and height of the source rectangle as above.
e.Graphics.DrawImage( _
image, _
New Rectangle(150, 250, CInt(0.6 * width), _
CInt(0.6 * height)), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

' Shrink the image using high-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic

' Pass in the destination rectangle, and the upper-left corner, width, 
' and height of the source rectangle as above.
e.Graphics.DrawImage( _
    image, _
    New Rectangle(290, 250, CInt(0.6 * width), CInt(0.6 * height)), _
    0, _
    0, _
    width, _
    height, _
    GraphicsUnit.Pixel)

Mengompilasi Kode

Contoh sebelumnya dirancang untuk digunakan dengan Formulir Windows, dan memerlukan PaintEventArgs e, yang merupakan parameter penanganan Paint aktivitas.

Lihat juga