2010-08-21 81 views
3

我正確地說16位圖像將被解碼並繪製得比24位或32位更快?我知道文件大小會更少,但如果位圖實際繪製速度比轉換它們的速度更快。如果速度更快,我將如何去保存16位jpeg文件?我只在Photoshop中找到一個選項來保存一個16位的位圖...這是54 MB。16位圖像和Android處理

回答

3

這取決於。如果你的屏幕(以及繪製到它的表面)是16位,它可以更快;如果它們是32位,則32位位圖可能會更快。

但是,如果您在資源方面(這意味着JPEG或PNG圖像),說他們是「16位」或「32位」是沒有意義的。 JPEG是一種顏色表示,通常會擴展爲32位,但您也可以將其解壓縮到16位(並且可能希望在抖動時進行抖動,以使其看起來不錯)。 PNG可以存儲很多表示,具體取決於圖像,並且通常會選擇最好的。此外,在包裝過程中,aapt會遍歷所有PNG圖像,並將其重新壓縮爲儘可能小的最終圖像,因此如果可能的話,甚至可以使用調色板表示。

因此,如何存儲圖像並不重要;重要的是在運行時解壓縮時創建的位圖。這裏有一些一般的規則:

  • 如果圖像有alpha,它將需要解壓縮到完整的32位。
  • 如果幀緩衝區和曲面是32位,應該將圖像解壓縮到32位。
  • 如果圖像沒有alpha,它可能是888(32位)或565(16位)。挑選使用的是...很棘手。

從歷史上看,我們在平臺上使用的設備有16位屏幕,所以我們必須處理它的複雜性。主要問題是平衡內存使用與渲染性能與質量之間的平衡。對於內存使用和渲染性能來說,16位是最好的...但是,對於許多圖像來說,如果圖像沒有抖動,將會出現色帶。

在哪裏做抖動也很棘手:理想情況下,你會做它的一部分,生成原始圖像,但這限制了你可以用它做什麼(沒有縮放,這意味着不使用9補丁)。另一方面,渲染時可以做到這一點,但這意味着您需要將圖像加載爲32位,並在每次將圖像拖入屏幕時抖動。這提供了最大的靈活性,但具有更多的內存和性能影響。

現在在實踐中,這實際上最終成爲平臺的一個罕見問題 - 因爲幾乎所有用作9補丁或其他類似圖像的圖像都具有透明度,因此無論如何都需要將其加載爲32位,因此它渲染時不會太大。

這一切都歸結做的是:

  • 如果圖像的透明度,不用擔心,它無論如何都會被載入32位。
  • 如果您的圖像沒有透明度,你將需要:
    • 決定是否抖動原始圖像。這將在16位屏幕上提供更好的質量(您會比關鍵性能渲染代碼更好地抖動),但不會充分利用32位屏幕。
    • 讓平臺決定要做什麼。這將給16位和32位屏幕帶來好的結果,但您不想縮放圖像。
    • 自己加載圖像,並明確控制API以決定使用何種格式以及何時(或如果)抖動。
+0

很好的答案,謝謝。 – jfisk 2010-08-22 06:05:43

0

我希望你的意思是16位,RGB 565格式,是的,它應該比24位RGB 888或32位RGB 8888格式更快。您在photoshop中看到的內容可能與RGB 565不同,但是每個組件16位的RGB,使每像素8位RGB增加一倍。

AFAIK JPEG不支持16位格式(每個像素爲565或16位)。