在 GDI+ 中绘制、定位和克隆图像

可以使用 Bitmap 类来加载和显示光栅图像,还可以使用 Metafile 类来加载和显示矢量图像。 BitmapMetafile 类继承自 Image 类。 若要显示矢量图像,需要 Graphics 类的实例和 Metafile。 若要显示光栅图像,需要 Graphics 类的实例和 BitmapGraphics 类的实例提供了 DrawImage 方法,该方法接收 MetafileBitmap 作为参数。

文件类型和克隆

下面的代码示例演示如何从文件 Climber.jpg 构造 Bitmap 并显示位图。 图像左上角的目标点 (10, 10) 在第二个和第三个参数中指定。

Bitmap myBitmap = new Bitmap("Climber.jpg");
myGraphics.DrawImage(myBitmap, 10, 10);
Dim myBitmap As New Bitmap("Climber.jpg")
myGraphics.DrawImage(myBitmap, 10, 10)

下图显示了该图像。

Image Sample

可从以下多种图形文件格式构造 Bitmap 对象:BMP、GIF、JPEG、EXIF、PNG、TIFF 和 ICON。

下面的代码示例演示如何从各种文件类型构造 Bitmap 对象,然后显示位图。

Bitmap myBMP = new Bitmap("SpaceCadet.bmp");
Bitmap myGIF = new Bitmap("Soda.gif");
Bitmap myJPEG = new Bitmap("Mango.jpg");
Bitmap myPNG = new Bitmap("Flowers.png");
Bitmap myTIFF = new Bitmap("MS.tif");

myGraphics.DrawImage(myBMP, 10, 10);
myGraphics.DrawImage(myGIF, 220, 10);
myGraphics.DrawImage(myJPEG, 280, 10);
myGraphics.DrawImage(myPNG, 150, 200);
myGraphics.DrawImage(myTIFF, 300, 200);
Dim myBMP As New Bitmap("SpaceCadet.bmp")
Dim myGIF As New Bitmap("Soda.gif")
Dim myJPEG As New Bitmap("Mango.jpg")
Dim myPNG As New Bitmap("Flowers.png")
Dim myTIFF As New Bitmap("MS.tif")

myGraphics.DrawImage(myBMP, 10, 10)
myGraphics.DrawImage(myGIF, 220, 10)
myGraphics.DrawImage(myJPEG, 280, 10)
myGraphics.DrawImage(myPNG, 150, 200)
myGraphics.DrawImage(myTIFF, 300, 200)

Bitmap 类提供了 Clone 方法,可用于复制现有的 BitmapClone 方法具有源矩形参数,可用于指定要复制的原始位图部分。 下面的代码示例演示如何通过克隆现有 Bitmap 的上半部分来创建 Bitmap。 然后便绘制出这两个图像。

Bitmap originalBitmap = new Bitmap("Spiral.png");
Rectangle sourceRectangle = new Rectangle(0, 0, originalBitmap.Width,
   originalBitmap.Height / 2);

Bitmap secondBitmap = originalBitmap.Clone(sourceRectangle,
   PixelFormat.DontCare);

myGraphics.DrawImage(originalBitmap, 10, 10);
myGraphics.DrawImage(secondBitmap, 150, 10);
Dim originalBitmap As New Bitmap("Spiral.png")
Dim sourceRectangle As New Rectangle(0, 0, originalBitmap.Width, _
   CType(originalBitmap.Height / 2, Integer))

Dim secondBitmap As Bitmap = originalBitmap.Clone(sourceRectangle, _
   PixelFormat.DontCare)

myGraphics.DrawImage(originalBitmap, 10, 10)
myGraphics.DrawImage(secondBitmap, 150, 10)

下图显示这两个图像。

Cropping

另请参阅