3.3 位圖
掌握了如何繪制矩形、橢圓等基本圖形后,現(xiàn)在就來看看GDI所提供的最有用的繪圖功能:位圖。
GDI中的Bitmap對(duì)象允許我們創(chuàng)建一個(gè)屏幕外的圖像(可以使用第3.2節(jié)中用到的繪圖方法和填充方法,可以加載預(yù)先繪制的圖形,還可以使用這些方法的組合),然后將該圖像的副本繪制在屏幕上。通過位圖,我們可以將外部的圖形加載到自己的游戲當(dāng)中,可以利用圖形基礎(chǔ)函數(shù)來構(gòu)建復(fù)雜圖形。只需要調(diào)用一個(gè)函數(shù)就可以將它們繪制到屏幕上。這些功能是使用GDI時(shí)最接近sprites(指移動(dòng)圖形對(duì)象)的。也可以通過每次更新屏幕時(shí)改變要繪制的圖像來創(chuàng)建有效的動(dòng)畫圖形。
3.3.1 使用Graphics類的基本函數(shù)創(chuàng)建位圖
通過在本章中已經(jīng)使用過的繪圖函數(shù)來創(chuàng)建位圖是很簡(jiǎn)單的。只要圖像準(zhǔn)備好,在屏幕上繪制就是快速和高效的,大大地優(yōu)于重復(fù)調(diào)用那些繪圖函數(shù)。
用這種方法來創(chuàng)建位圖的話,首先要實(shí)例化一個(gè)Bitmap對(duì)象,在對(duì)象的構(gòu)造函數(shù)中設(shè)置好我們所期望的圖像的寬度和高度(單位為像素)。這樣就創(chuàng)建好了一個(gè)空的位圖,該位圖在初始時(shí)被填充為黑色。
為了能夠在位圖上進(jìn)行繪圖,我們需要獲得一個(gè)Graphics對(duì)象,這可以調(diào)用靜態(tài)函數(shù)Graphics.FromImage來實(shí)現(xiàn)。一旦它執(zhí)行完畢,我們就可以使用所有的繪圖方法來繪制任何想要的圖形(或文本)。要記得這是發(fā)生在位圖中,而不是在屏幕上,位圖是不可見的,直到我們以后對(duì)它進(jìn)行了繪制才會(huì)可見(這將很快實(shí)現(xiàn))。
程序清單3-8中創(chuàng)建了一個(gè)Bitmap對(duì)象,將其背景設(shè)置為白色,然后在其內(nèi)部繪制了一個(gè)圓。
程序清單3-8 創(chuàng)建一個(gè)位圖,并在上面繪畫
// 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屬性,不需要單獨(dú)存儲(chǔ)這些信息。