當前位置:編程學習大全網 - 源碼下載 - Cocos2d-x之獲取圖像像素值

Cocos2d-x之獲取圖像像素值

制作遊戲時,我們最常用的圖片格式是png,因為png可以有透明的背景,這樣在遊戲顯示圖片是,透明的部分不會顯示,只顯示我們要的那部分。但是,透明的部分依然是圖片的壹部分,當妳制作了壹個非矩形的按鈕,會有相當多的透明部分點擊有效,那麽如何做到點擊透明部分無效呢?這就是本片文章要講的:獲取圖像像素值。當然不僅僅在制作非矩形按鈕時有用,在遊戲中的很多涉及圖片處理功能的地方也大有用途。

廢話不多說,直接貼源碼(Cocos2d-x 3.x版本):

HelloWorldScene.h文件

HelloWorldScene.cpp文件:

在GetRGBA函數中,調用了OpenGL的接口glReadPixels,它用於讀取壹些像素。當前可以簡單理解為“把已經繪制好的像素(它可能已經被保存到顯卡的顯存中)讀取到內存”。

glReadPixels函數總***有七個參數。前四個參數可以得到壹個矩形,該矩形所包括的像素都會被讀取出來。(第壹、二個參數表示了矩形的左下角橫、縱坐標,坐標以窗口最左下角為零,最右上角為最大值;第三、四個參數表示了矩形的寬度和高度)

第五個參數表示讀取的內容,例如:GL_RGB就會依次讀取像素的紅、綠、藍三種數據,GL_RGBA則會依次讀取像素的紅、綠、藍、alpha四種數據,GL_RED則只讀取像素的紅色數據(類似的還有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA顏色模式,而是采用顏色索引模式,則也可以使用GL_COLOR_INDEX來讀取像素的顏色索引。目前僅需要知道這些,但實際上還可以讀取其它內容,例如深度緩沖區的深度數據等。

第六個參數表示讀取的內容保存到內存時所使用的格式,例如:GL_UNSIGNED_BYTE會把各種數據保存為GLubyte,GL_FLOAT會把各種數據保存為GLfloat等。

第七個參數表示壹個指針,像素數據被讀取後,將被保存到這個指針所表示的地址。註意,需要保證該地址有足夠的可以使用的空間,以容納讀取的像素數據。例如壹幅大小為256*256的圖象,如果讀取其RGB數據,且每壹數據被保存為GLubyte,總大小就是:256*256*3?=?196608字節,即192千字節。如果是讀取RGBA數據,則總大小就是256*256*4?=?262144字節,即256千字節。

註意:glReadPixels實際上是從緩沖區中讀取數據,如果使用了雙緩沖區,則默認是從正在顯示的緩沖(即前緩沖)中讀取,而繪制工作是默認繪制到後緩沖區的。因此,如果需要讀取已經繪制好的像素,往往需要先交換前後緩沖。

  • 上一篇:研究生畢業想開壹個校園app,想知道開發壹個類似學長學弟幫的軟件要多少錢?
  • 下一篇:2019年彩虹聯歡會主持詞
  • copyright 2024編程學習大全網