亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python(Pygame)圖像詳解

2019-11-06 07:34:25
字體:
來源:轉載
供稿:網友

圖像格式

之前說的RBG圖像,在游戲中我們往往使用RGBA圖像,這個A是alpha,也就是表示透明度的部分,值也是0~255,0代表完全透明,255是完全不透明,而像100這樣的數字,代表部分透明。你可以使用多種軟件創建含有Alpha通道的圖片。

Pygmae都能很好的支持,具體支持的格式如下:

JPEG(Join Photograhpic Exper Group),極為常用,一般后綴名為.jpg或者.jpeg。數碼相機、網上的圖片基本都是這種格式。這是一種有損壓縮方式,盡管對圖片質量有些損壞,但對于減小文件尺寸非常棒。優點很多只是不支持透明。PNG(Portable Network Graphics)將會大行其道的一種格式,支持透明,無損壓縮。對于網頁設計,軟件界面設計等等都是非常棒的選擇!GIF 網上使用的很多,支持透明和動畫,只是只能有256種顏色,軟件和游戲中使用很少BMP Windows上的標準圖像格式,無壓縮,質量很高但尺寸很大,一般不使用PCXTGATIFLBM, PBMXPM

使用Surface對象

對于Pygame而已,加載圖片就是pygame.image.load,給它一個文件名然后就還給你一個surface對象。盡管讀入的圖像格式各不相同,surface對象隱藏了這些不同。你可以對一個Surface對象進行涂畫、變形、復制等各種操作。事實上,屏幕也只是一個surface,pygame.display.set_mode就返回了一個屏幕surface對象。

創建Surfaces對象

一種方法就是剛剛說的pygame.image.load,這個surface有著和圖像相同的尺寸和顏色;另外一種方法是指定尺寸創建一個空的surface,下面的語句創建一個256×256像素的surface:

bland_surface = pygame.Surface((256, 256))

如果不指定尺寸,那么就創建一個和屏幕一樣大小的。

你還有兩個參數可選,第一個是flags:

HWSURFACE – 類似于前面講的,更快!不過最好不設定,Pygmae可以自己優化。SRCALPHA – 有Alpha通道的surface,如果你需要透明,就要這個選項。這個選項的使用需要第二個參數為32~

第二個參數是depth,和pygame.display.set_mode中的一樣,你可以不設定,Pygame會自動設的和display一致。不過如果你使用了SRCALPHA,還是設為32吧:

bland_alpha_surface = pygame.Surface((256, 256), flags=SRCALPHA, depth=32)

轉換Surfaces

通常你不用在意surface里的具體內容,不過也許需要把這些surface轉換一下以獲得更高的性能,還記得一開始的程序中的兩句話嗎:

background = pygame.image.load(background_image_filename).convert()mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()

第一句是普通的轉換,相同于display;第二句是帶alpha通道的轉換。如果你給convert或者conver_alpha一個surface對象作為參數,那么這個會被作為目標來轉換。

矩形對象(Rectangle Objects)

一般來說在制定一個區域的時候,矩形是必須的,比如在屏幕的一部分畫東西。在pygame中矩形對象極為常用,它的指定方法可以用一個四元素的元組,或者兩個二元素的元組,前兩個數為左上坐標,后兩位為右下坐標。

Pygame中有一個Rect類,用來存儲和處理矩形對象(包含在pygame.locals中,所以如果你寫了from pygame.locals import *就可以直接用這個對象了),比如:

my_rect1 = (100, 100, 200, 150)my_rect2 = ((100, 100), (200, 150))#上兩種為基礎方法,表示的矩形也是一樣的my_rect3 = Rect(100, 100, 200, 150)my_rect4 = Rect((100, 100), (200, 150))

剪裁(Clipping)

通常游戲的時候你只需要繪制屏幕的一部分。比如魔獸上面是菜單,下面是操作面板,中間的小兵和英雄打的不可開交時候,上下的部分也是保持相對不動的。為了實現這一點,surface就有了一種叫裁剪區域(clipping area)的東西,也是一個矩形,定義了哪部分會被繪制,也就是說一旦定義了這個區域,那么只有這個區域內的像素會被修改,其他的位置保持不變,默認情況下,這個區域是所有地方。我們可以使用set_clip來設定,使用get_clip來獲得這個區域。

下面幾句話演示了如何使用這個技術來繪制不同的區域:

screen.set_clip(0, 400, 200, 600)draw_map()#在左下角畫地圖screen.set_clip(0, 0, 800, 60)draw_panel()#在上方畫菜單面板

子表面(Subsurfaces)

Subsurface就是在一個Surface中再提取一個Surface,記住當你往Subsurface上畫東西的時候,同時也向父表面上操作。這可以用來繪制圖形文字,盡管pygame.font可以用來寫很不錯的字,但只是單色,游戲可能需要更豐富的表現,這時候你可以把每個字母(中文的話有些吃力了)各自做成一個圖片,不過更好的方法是在一張圖片上畫滿所有的字母。把整張圖讀入,然后再用Subsurface把字母一個一個“摳”出來,就像下面這樣:

my_font_image = Pygame.load("font.png")letters = []letters["a"] = my_font_image.subsurface((0,0), (80,80))letters["b"] = my_font_image.subsurface((80,0), (80,80))

填充Surface

填充有時候可以作為一種清屏的操作,把整個surface填上一種顏色:

screen.fill((0, 0, 0))

同樣可以提供一個矩形來制定填充哪個部分(這也可以作為一種畫矩形的方法)。

設置Surface的像素

我們能對Surface做的最基本的操作就是設置一個像素的色彩了,雖然我們基本不會這么做,但還是要了解。set_at方法可以做到這一點,它的參數是坐標和顏色,下面的小腳本會隨機的在屏幕上畫點:

#coding=utf-8'''Created on 2017年3月4日@author: zxt'''import pygamefrom pygame.locals import QUITfrom sys import exitfrom random import randintimport timepygame.init()screen = pygame.display.set_mode((640, 480), 0, 32)while True:        for event in pygame.event.get():        if event.type == QUIT:            pygame.display.quit()            exit()        screen.fill((255, 255, 255))        screen.lock()    for i in xrange(100):        rand_col = (randint(0, 255), randint(0, 255), randint(0, 255))        rand_pos = (randint(0, 639), randint(0, 479))        pygame.draw.rect(screen, rand_col, (rand_pos, (3, 3)))        #screen.set_at(rand_pos, rand_col)        time.sleep(0.01)    screen.unlock()                pygame.display.update()

獲得Surface上的像素

set_at的兄弟get_at可以幫我們做這件事,它接受一個坐標返回指定坐標點上的顏色。不過記住get_at在對hardware surface操作的時候很慢,而全屏的時候總是hardware的,所以慎用這個方法!

鎖定Surface

當Pygame往surface上畫東西的時候,首先會把surface鎖住,以保證不會有其它的進程來干擾,畫完之后再解鎖。鎖和解鎖時自動發生的,所以有時候可能不那么有效率,比如上面的例子,每次畫100個點,那么就得鎖解鎖100次,現在我們把兩句注釋去掉,再執行看看是不是更快了(好吧,其實我沒感覺出來,因為現在的機器性能都不錯,這么點的差異還不太感覺的出來。不過請相信我~復雜的情況下會影響效率的)?

當你手動加鎖的時候,一定不要忘記解鎖,否則pygame有可能會失去響應。雖然上面的例子可能沒問題,但是隱含的bug是我們一定要避免的事情。

Blitting

blit的的中文翻譯給人摸不著頭腦的感覺,可以譯為位塊傳送(bit block transfer),其意義是將一個平面的一部分或全部圖象整塊從這個平面復制到另一個平面,下面還是直接使用英文。

blit是對表面做的最多的操作,我們在前面的程序中已經多次用到,不多說了;blit的還有一種用法,往往用在對動畫的表現上,比如下例通過對frame_no的值的改變,我們可以把不同的幀(同一副圖的不同位置)畫到屏幕上:

screen.blit(ogre, (300, 200), (100 * frame_no, 0, 100, 100))
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美久久精品午夜青青大伊人| 韩国v欧美v日本v亚洲| 色综合久久88色综合天天看泰| 亚洲一区第一页| 欧美第一淫aaasss性| 北条麻妃99精品青青久久| 麻豆乱码国产一区二区三区| 韩曰欧美视频免费观看| 亚洲精选一区二区| 亚洲欧美中文日韩在线| 亚洲大胆人体视频| 麻豆一区二区在线观看| 久久手机免费视频| 日本一区二区三区四区视频| 88xx成人精品| 91精品国产九九九久久久亚洲| 亚洲人成电影在线观看天堂色| 亚洲成人免费在线视频| 日韩精品高清在线观看| 日韩精品在线免费播放| 亚洲国产一区自拍| 欧美成人高清视频| 精品亚洲精品福利线在观看| 欧美夫妻性生活视频| 久久综合伊人77777尤物| 欧美老肥婆性猛交视频| 亚洲毛片一区二区| 国产欧美日韩免费看aⅴ视频| 日韩精品视频观看| 国产精品香蕉在线观看| 国产精品自在线| 欧美中文在线观看国产| 538国产精品一区二区在线| 日韩中文字幕精品| 欧美亚洲在线视频| 久久精品成人欧美大片| 欧美电影免费播放| 亚洲高清一二三区| 亚洲精品动漫100p| 亚洲精品成a人在线观看| 亚洲人成网在线播放| 国产精品欧美日韩一区二区| 欧美一级电影免费在线观看| 97国产一区二区精品久久呦| 国产精品流白浆视频| 国产精品久久99久久| 亚洲国产精品中文| 91免费精品国偷自产在线| 欧美电影院免费观看| 欧美亚洲视频在线看网址| 久久精视频免费在线久久完整在线看| 91精品视频免费| 国产日产欧美a一级在线| 美女啪啪无遮挡免费久久网站| 国内精品视频在线| 国产亚洲成av人片在线观看桃| 精品国产乱码久久久久酒店| 亚洲国产成人精品女人久久久| 亚洲影视九九影院在线观看| 午夜精品一区二区三区av| 欧美天天综合色影久久精品| 日韩中文字幕视频在线| 日韩亚洲成人av在线| 成人欧美一区二区三区黑人| 丝袜美腿精品国产二区| 欧美疯狂性受xxxxx另类| 日韩在线视频网| 久久精品一偷一偷国产| 亚洲自拍高清视频网站| 亚洲精品99久久久久中文字幕| 97免费视频在线播放| 日韩不卡中文字幕| 91网站在线看| 国产精品亚洲网站| 日韩大片在线观看视频| 亚洲性日韩精品一区二区| 欧美午夜激情视频| 亚洲福利视频在线| 亚洲成人av在线播放| 国产精品久久久久久搜索| 亚洲性无码av在线| 色偷偷av亚洲男人的天堂| 日韩小视频在线观看| 亚洲国产精品va在看黑人| 91精品国产沙发| 国产精品久久久久久婷婷天堂| 精品久久久久久亚洲精品| 久久久视频免费观看| 91精品国产自产91精品| 国产亚洲精品久久久优势| 91视频国产一区| 亚洲精品一区久久久久久| 欧美丰满少妇xxxxx| 国产综合久久久久久| 国产精品女视频| 日本一区二三区好的精华液| 欧美性xxxxx| 国产精品视频久久久久| 91精品久久久久久久久久另类| 亚洲18私人小影院| 欧洲精品久久久| 中日韩美女免费视频网站在线观看| 欧美激情精品久久久久| 欧美性猛交xxxx免费看久久久| 91网站在线看| 成人有码在线播放| 国产精品入口福利| 国产精品视频地址| 亚洲精品成人久久久| 久热精品视频在线观看| 在线视频一区二区| 日韩在线视频免费观看高清中文| 欧美激情精品久久久久| 一区二区欧美激情| 亚洲网址你懂得| 亚洲码在线观看| 亚洲人成电影网站色www| 色综合久久久久久中文网| 亚洲深夜福利视频| 国产精品美女呻吟| 国产精品久久久久国产a级| 久久影视免费观看| 欧美日韩另类字幕中文| 欧美激情一区二区三区成人| 国产盗摄xxxx视频xxx69| 欧美在线视频观看| 亚洲小视频在线| 亚洲综合大片69999| 国产成人自拍视频在线观看| 18性欧美xxxⅹ性满足| 九九久久久久久久久激情| 亚洲a级在线观看| 2019亚洲男人天堂| 久久精品国产免费观看| 精品国产31久久久久久| 日本久久中文字幕| 国产精品91在线观看| 97视频网站入口| 成人福利在线观看| 岛国视频午夜一区免费在线观看| 久久99久久亚洲国产| 中文字幕在线看视频国产欧美| 91美女片黄在线观看游戏| 欧美第一黄网免费网站| 国产91亚洲精品| …久久精品99久久香蕉国产| 亚洲欧美成人网| 国产成人av网| 国产精品揄拍一区二区| 亚洲精品一区中文字幕乱码| 97香蕉超级碰碰久久免费的优势| 国产丝袜一区视频在线观看| 欧亚精品中文字幕| 国产99视频精品免视看7| 精品欧美激情精品一区| 国产91色在线|免| 日本亚洲欧美三级| 欧美一级免费视频| 538国产精品一区二区免费视频| 亚洲成人免费在线视频| 国产成人精品优优av| 日韩精品极品视频| 一区二区三欧美| 久久99亚洲精品|