Bagikan melalui


Memangkas dan Menskalakan Gambar di GDI+

Anda dapat menggunakan DrawImage metode Graphics kelas untuk menggambar dan memposisikan gambar vektor dan gambar raster. DrawImage adalah metode yang kelebihan beban, jadi ada beberapa cara Anda dapat menyediakannya dengan argumen.

Variasi DrawImage

Satu variasi DrawImage metode menerima Bitmap dan Rectangle. Persegi panjang menentukan tujuan untuk operasi menggambar; yaitu, menentukan persegi panjang untuk menggambar gambar. Jika ukuran persegi panjang tujuan berbeda dari ukuran gambar asli, gambar diskalakan agar sesuai dengan persegi tujuan. Contoh kode berikut menunjukkan cara menggambar gambar yang sama tiga kali: sekali tanpa penskalaan, sekali dengan ekspansi, dan sekali dengan kompresi:

Bitmap myBitmap = new Bitmap("Spiral.png");

Rectangle expansionRectangle = new Rectangle(135, 10,
   myBitmap.Width, myBitmap.Height);

Rectangle compressionRectangle = new Rectangle(300, 10,
   myBitmap.Width / 2, myBitmap.Height / 2);

myGraphics.DrawImage(myBitmap, 10, 10);
myGraphics.DrawImage(myBitmap, expansionRectangle);
myGraphics.DrawImage(myBitmap, compressionRectangle);
Dim myBitmap As New Bitmap("Spiral.png")

Dim expansionRectangle As New Rectangle(135, 10, _
   myBitmap.Width, myBitmap.Height)

Dim compressionRectangle As New Rectangle(300, 10, _
   CType(myBitmap.Width / 2, Integer), CType(myBitmap.Height / 2, Integer))

myGraphics.DrawImage(myBitmap, 10, 10)
myGraphics.DrawImage(myBitmap, expansionRectangle)
myGraphics.DrawImage(myBitmap, compressionRectangle)

Ilustrasi berikut menunjukkan tiga gambar.

Scaling

Beberapa variasi DrawImage metode memiliki parameter persegi panjang sumber serta parameter persegi panjang tujuan. Parameter persegi panjang sumber menentukan bagian gambar asli yang akan digambar. Persegi panjang tujuan menentukan persegi panjang untuk menggambar bagian gambar tersebut. Jika ukuran persegi panjang tujuan berbeda dari ukuran persegi panjang sumber, gambar diskalakan agar sesuai dengan persegi tujuan.

Contoh kode berikut menunjukkan cara membuat Bitmap dari file Runner.jpg. Seluruh gambar digambar tanpa penskalakan pada (0, 0). Kemudian sebagian kecil gambar digambar dua kali: sekali dengan kompresi dan sekali dengan ekspansi.

Bitmap myBitmap = new Bitmap("Runner.jpg");

// One hand of the runner
Rectangle sourceRectangle = new Rectangle(80, 70, 80, 45);

// Compressed hand
Rectangle destRectangle1 = new Rectangle(200, 10, 20, 16);

// Expanded hand
Rectangle destRectangle2 = new Rectangle(200, 40, 200, 160);

// Draw the original image at (0, 0).
myGraphics.DrawImage(myBitmap, 0, 0);

// Draw the compressed hand.
myGraphics.DrawImage(
   myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel);

// Draw the expanded hand.
myGraphics.DrawImage(
   myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel);
Dim myBitmap As New Bitmap("Runner.jpg")

' One hand of the runner
Dim sourceRectangle As New Rectangle(80, 70, 80, 45)

' Compressed hand
Dim destRectangle1 As New Rectangle(200, 10, 20, 16)

' Expanded hand
Dim destRectangle2 As New Rectangle(200, 40, 200, 160)

' Draw the original image at (0, 0).
myGraphics.DrawImage(myBitmap, 0, 0)

' Draw the compressed hand.
myGraphics.DrawImage( _
   myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel)

' Draw the expanded hand. 
myGraphics.DrawImage( _
   myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel)

Ilustrasi berikut menunjukkan gambar yang tidak diskalakan, dan bagian gambar yang dikompresi dan diperluas.

Cropping and Scaling

Baca juga