Dela via


Beskära och skala bilder i GDI+

Du kan använda DrawImage-metoden för klassen Graphics för att rita och placera vektorbilder och rasterbilder. DrawImage är en överbelastad metod, så det finns flera sätt att förse den med argument.

DrawImage-variationer

En variant av metoden DrawImage mottar en Bitmap och en Rectangle. Rektangeln anger målet för ritningsåtgärden. Det innebär att den anger den rektangel som bilden ska ritas i. Om målrektangelns storlek skiljer sig från storleken på den ursprungliga bilden skalas bilden så att den passar målrektangeln. Följande kodexempel visar hur du ritar samma bild tre gånger: en gång utan skalning, en gång med en expansion och en gång med komprimering:

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)

Följande bild visar de tre bilderna.

skalning

Vissa varianter av metoden DrawImage har en källrektangelparameter samt en målrektangelparameter. Parametern source-rektangel anger den del av den ursprungliga avbildningen som ska ritas. Målrektangeln anger den rektangel där den delen av bilden ska ritas. Om målrektangelns storlek skiljer sig från storleken på källrektangeln skalas bilden så att den passar målrektangeln.

Följande kodexempel visar hur du skapar en Bitmap från filen Runner.jpg. Hela bilden ritas utan skalning vid (0, 0). Sedan ritas en liten del av bilden två gånger: en gång med komprimering och en gång med en expansion.

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)

Följande bild visar den oskalade bilden och de komprimerade och expanderade bilddelarna.

Beskärning och skalning

Se även