3.3 位图
掌握了如何绘制矩形、椭圆等基本图形后,现在就来看看GDI所提供的最有用的绘图功能:位图。
GDI中的Bitmap对象允许我们创建一个屏幕外的图像(可以使用第3.2节中用到的绘图方法和填充方法,可以加载预先绘制的图形,还可以使用这些方法的组合),然后将该图像的副本绘制在屏幕上。通过位图,我们可以将外部的图形加载到自己的游戏当中,可以利用图形基础函数来构建复杂图形。只需要调用一个函数就可以将它们绘制到屏幕上。这些功能是使用GDI时最接近sprites(指移动图形对象)的。也可以通过每次更新屏幕时改变要绘制的图像来创建有效的动画图形。
3.3.1 使用Graphics类的基本函数创建位图
通过在本章中已经使用过的绘图函数来创建位图是很简单的。只要图像准备好,在屏幕上绘制就是快速和高效的,大大地优于重复调用那些绘图函数。
用这种方法来创建位图的话,首先要实例化一个Bitmap对象,在对象的构造函数中设置好我们所期望的图像的宽度和高度(单位为像素)。这样就创建好了一个空的位图,该位图在初始时被填充为黑色。
为了能够在位图上进行绘图,我们需要获得一个Graphics对象,这可以调用静态函数Graphics.FromImage来实现。一旦它执行完毕,我们就可以使用所有的绘图方法来绘制任何想要的图形(或文本)。要记得这是发生在位图中,而不是在屏幕上,位图是不可见的,直到我们以后对它进行了绘制才会可见(这将很快实现)。
程序清单3-8中创建了一个Bitmap对象,将其背景设置为白色,然后在其内部绘制了一个圆。
程序清单3-8 创建一个位图,并在上面绘画
// Declare the Bitmap object that we are going to create
Bitmap myBitmap;
private void InitializeBitmap()
{
// Create the bitmap and set its width and height
myBitmap = new Bitmap(50, 50);
// Create a Graphics object for our bitmap
using (Graphics gfx = Graphics.FromImage(myBitmap))
{
// Fill the entire bitmap in white
gfx.Clear(Color.White);
// Create a pen for drawing
using (Pen b = new Pen(Color.Black))
{
// Draw a circle within our bitmap
gfx.DrawEllipse(b, 0, 0, myBitmap.Width, myBitmap.Height);
}
}
}
从程序清单3-8中您可以看到,为了获得Bitmap的尺寸,我们可以使用其Width属性和Height属性,不需要单独存储这些信息。