Procedure: Interpolatiemodus gebruiken om de kwaliteit van de afbeelding te beheren tijdens het schalen
De interpolatiemodus van een Graphics object beïnvloedt de manier waarop GDI+ afbeeldingen schaalt (stretcht en verkleint). De InterpolationMode opsomming definieert verschillende interpolatiemodi, waarvan sommige worden weergegeven in de volgende lijst:
Als u een afbeelding wilt uitrekken, moet elke pixel in de oorspronkelijke afbeelding worden toegewezen aan een groep pixels in de grotere afbeelding. Als u een afbeelding wilt verkleinen, moeten groepen pixels in de oorspronkelijke afbeelding worden toegewezen aan één pixels in de kleinere afbeelding. De effectiviteit van de algoritmen die deze afbeeldingstransformaties uitvoeren, bepaalt de kwaliteit van een geschaalde afbeelding. Algoritmen die afbeeldingen van een hogere kwaliteit produceren, hebben meestal meer verwerkingstijd nodig. In de voorgaande lijst is NearestNeighbor de modus met de laagste kwaliteit en is HighQualityBicubic de modus met de hoogste kwaliteit.
Als u de interpolatiemodus wilt instellen, wijst u een van de leden van de InterpolationMode opsomming toe aan de eigenschap InterpolationMode van een Graphics-object.
Voorbeeld
In het volgende voorbeeld wordt een afbeelding tekent en vervolgens de afbeelding verkleind met drie verschillende interpolatiemodi.
In de volgende afbeelding ziet u de oorspronkelijke afbeelding en de drie kleinere afbeeldingen.
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)
De code compileren
Het voorgaande voorbeeld is ontworpen voor gebruik met Windows Forms en vereist PaintEventArgse
, een parameter van de Paint gebeurtenis-handler.
Zie ook
.NET Desktop feedback