GDI+'da Görüntü Kırpma ve Ölçeklendirme

Vektör görüntüleri ve raster görüntüleri çizmek ve konumlandırmak için sınıfının yöntemini Graphics kullanabilirsinizDrawImage. DrawImage aşırı yüklenmiş bir yöntem olduğundan, bunu bağımsız değişkenlerle sağlamanın çeşitli yolları vardır.

DrawImage Çeşitlemeleri

Yöntemin DrawImage bir varyasyonu ve BitmapRectanglealır. Dikdörtgen, çizim işleminin hedefini belirtir; diğer bir ifadeyle, görüntünün çizildiği dikdörtgeni belirtir. Hedef dikdörtgenin boyutu özgün görüntünün boyutundan farklıysa, görüntü hedef dikdörtgene sığacak şekilde ölçeklendirilir. Aşağıdaki kod örneğinde aynı görüntüyü üç kez çizme işlemi gösterilmektedir: bir kez ölçeklendirme olmadan, bir kez genişletmeyle ve bir kez sıkıştırma ile:

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)

Aşağıdaki çizimde üç resim gösterilmektedir.

Scaling

Yöntemin DrawImage bazı varyasyonlarında kaynak dikdörtgen parametresinin yanı sıra hedef dikdörtgen parametresi vardır. Source-rectangle parametresi, özgün görüntünün çizecek bölümünü belirtir. Hedef dikdörtgen, görüntünün bu bölümünün çizildiği dikdörtgeni belirtir. Hedef dikdörtgenin boyutu kaynak dikdörtgenin boyutundan farklıysa, resim hedef dikdörtgene sığacak şekilde ölçeklendirilir.

Aşağıdaki kod örneği, Runner.jpg dosyasından nasıl oluşturacaklarını Bitmap gösterir. Görüntünün tamamı (0, 0) ölçeği olmadan çizilir. Ardından görüntünün küçük bir kısmı iki kez çizilir: bir kez sıkıştırma ve bir kez genişletme ile.

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)

Aşağıdaki çizimde ölçeklendirilmemiş görüntü ve sıkıştırılmış ve genişletilmiş görüntü bölümleri gösterilmektedir.

Cropping and Scaling

Ayrıca bkz.