2011-07-21 91 views
5

我已經注意到,每個使用Canvas對象的人都會在4倍像素緩衝區(RGBA)周圍乘數。我用本地像素編碼(Delphi和C++)進行了很多工作,並將其識別爲普通的32位RGBA(888-8編碼)。 我的問題是:有沒有辦法檢測瀏覽器的像素格式?如果您在支持16位(565編碼)或24位(888編碼)的設備上運行,如果瀏覽器必須降級每次重繪的位圖,速度會非常慢。特別是當涉及到alpha混合時。Javascript畫布pixelformat

此外(這是次要的):是否有可能在javascript下創建純粹的888或565位圖?或者基於8位調色板的位圖呢?在我看來,基於JS的遊戲只需要處理8位像素就可以大大受益。

+0

請注意,我的問題是:「有沒有辦法檢測瀏覽器的像素格式?」 –

回答

3

不,沒有看似降低畫布像素的方式,因爲這就是imageData只是就規格本身而言。

你當然可以製作一個JavaScript遊戲,只使用8位PNG,這會節省空間和加載時間,但不會渲染時間。

+0

我想這個問題可以重新制定:如果我在僅支持16位圖形的瀏覽器(移動設備,儘管現在大多數支持32)的瀏覽器中運行我的代碼,像素數據將以565格式(單詞)還是它會一直處於現在的RGB-A格式嗎? –

+0

我相信後者。 –

2

不,沒有辦法指定你想要的顏色空間。任何手動攻擊只會進一步降低渲染速度。根據我的經驗,某些瀏覽器(Google Chrome)可以渲染非常複雜的遊戲並保持較高的幀速率。

0

其實你正在混合兩個實體:圖像顏色空間和表面顏色空間。 5-6-5是根據定義沒有透明度概念的表面顏色空間。 圖像和<canvas>是z順序渲染的主題,因此必須有一種或另一種形式的alpha。

所以答案是'否',因爲它違反了要求。

+0

565只是編碼方法,如果你喜歡,可以使用「編解碼器」。我用這些術語來簡單地強調每個像素的位範圍和存儲介質(在這種情況下是16位字)。將15/16位像素解碼爲RGB非常簡單。問題的關鍵在於移動設備在以其他方式追蹤原始像素數據之後是否會提高速度。但我確實希望瀏覽器能夠將像素數據解碼爲RGB值數組。至於Z順序渲染,這與HLI有關,而不是數據類型。 –