讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 16.5 圖像 >

16.5 圖像

在屏幕上畫形狀、線和單個像素只是製作圖形的一種方式。有時我們還想用從別處得來的圖片、可能是數碼照片、從網上下載的圖片或者在圖像編輯程序中創建的圖片。在 Pygame 中,使用圖像最簡單的方法就是利用 image 函數。

下面來看一個例子。我們要顯示一個圖像,如果你用本書的安裝程序安裝了 Python,這個圖像已經在你的硬盤上了。安裝程序會在 \examples 文件夾中創建一個 images 子文件夾,這個程序中要使用的文件是 beach_ball.png。所以,如果你的系統是 Windows,你會在這裡找到這個文件:

c:\Program Files\helloworld\examples\images\beach_ball.png。

如果沒有使用這本書的安裝程序,可以從本書網站(www.helloworldbook2.com) 下載beach_ball.png。

完成這些例子時,需要把 beach_ball.png 文件複製到保存 Python 程序的同一位置上。這樣一來,程序運行時 Python 就能很容易地找到這個文件。把 beach_ball.png 文件放在正確的位置上後,鍵入代碼清單 16-10 中的程序,試著運行這個程序。

代碼清單 16-10 在 Pygame 窗口中顯示沙灘球圖像

運行這個程序時,會看到一個沙灘球的圖像顯示在 Pygame 窗口的左上角附近,如下圖所示。

代碼清單 16-10 中,只有第 5 行和第 6 行代碼是新加的代碼。所有其他代碼都在代碼清單 16-3 到代碼清單 16-9 中見過。我們把先前例 子中的 draw 代碼替換為從硬盤加載圖像並顯示圖像的代碼。

第 5 行中,pygame.image.load 函數從硬盤加載一個圖像,並創建一個名為 my_ball 的對象。my_ball 對像 是一個表面(前面討論過表面)。不過我們看不到這個表面,它只在內存中。我們唯一能看到的表面是顯示表面,名為 screen(這在第 3 行創建)。第 6 行把 my_ball 表面複製到 screen 表面上。然後像前面一樣,通過 display.flip 調用使它可見。

沒關係的,卡特。很快我們就可以移動這個球了!

你可能已經注意到代碼清單 16-10 第 6 行有一個看上去很有趣的東西:screen.blitblit 是什麼意思?請從「術語箱」找出答案。

在 Pygame 中,我們將像素從一個表面複製或塊移到另一個表面,這裡就是將像素從 my_ball 表面複製到 screen 表面。

術語箱

完成圖形編程時,將像素從一個地方複製到另一個地方是很常見的(比如從變量複製到屏幕,或者從一個表面複製到另一個表面)。像素複製在編程中有一個特殊的名字,叫做塊移(blitting)。我們說將一個圖像(或圖像的一部分,或者只是一些像素)從一個地方「塊移」到另一個地方。這只是「複製」的一種有趣的說法,不過看到「塊移」時,你就會知道複製的是像素而不是其他內容。

在代碼清單 16-10 的第 6 行,我們把沙灘球圖像塊移到位置 50, 50,這表示距窗口左邊界 50 像素,距上邊界 50 像素。處理 surfacerect 時,這會設置圖像左上角的位置。所以沙灘球的左邊距離窗口左邊界有 50 像素,沙灘球的頂邊距離窗口上邊界也是 50 像素。