Oříznutí a změna měřítka obrázků v GDI+

Metodu DrawImageGraphics třídy můžete použít k kreslení a umístění vektorových obrázků a rastrových obrázků. DrawImage je přetížená metoda, takže existuje několik způsobů, jak ji můžete zadat argumenty.

Varianty DrawImage

Jedna varianta DrawImage metody přijímá a Bitmap a Rectangle. Obdélník určuje cíl operace výkresu; to znamená, že určuje obdélník, ve kterém se má obrázek nakreslit. Pokud se velikost cílového obdélníku liší od velikosti původního obrázku, obrázek se škáluje tak, aby odpovídal cílovému obdélníku. Následující příklad kódu ukazuje, jak nakreslit stejný obrázek třikrát: jednou bez škálování, jednou s rozšířením a jednou s kompresí:

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)

Následující obrázek znázorňuje tři obrázky.

Scaling

Některé varianty DrawImage metody mají parametr zdrojového obdélníku a také parametr destination-rectangle. Parametr zdrojového obdélníku určuje část původního obrázku, která se má nakreslit. Cílový obdélník určuje obdélník, ve kterém se má nakreslit tato část obrázku. Pokud se velikost cílového obdélníku liší od velikosti zdrojového obdélníku, obrázek se škáluje tak, aby odpovídal cílovému obdélníku.

Následující příklad kódu ukazuje, jak vytvořit Bitmap ze souboru Runner.jpg. Celý obrázek se nakreslí bez měřítka (0, 0). Pak je malá část obrázku nakreslena dvakrát: jednou s kompresí a jednou s rozšířením.

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)

Následující obrázek znázorňuje neškálovaný obrázek a komprimované a rozbalené části obrázků.

Cropping and Scaling

Viz také