天天看點

Skia深入分析7——區域解碼Skia深入分析7——區域解碼

1、概述

-當圖檔很大時,解碼速度緩慢,占用記憶體很高,并且,當圖檔超過一定尺寸時,無法做紋理上傳和顯示(這跟gpu能力有關,一般的gpu是8192*8192)。這時隻好做下采樣,但會犧牲圖檔顯示的品質。

-對于圖庫等需要清晰浏覽圖檔的應用,不可能設定一個下采樣率去解決這一問題,是以,google加入了區域解碼這個功能,使我們可以從原始的圖檔檔案中,解出一部分區域完整的圖檔内容。

-區域解碼的難點主要在于定位像素區域所對應的檔案位置,這個需要圖像編碼時有一定的連續性,所幸,主流圖像格式都是這樣的。

-目前區域解碼主要實作了png、jpeg、webp類型圖檔的支援。本篇過一下區域解碼的架構,并介紹一下最常用的jpeg格式的區域解碼實作。

2、區域解碼總流程

Skia深入分析7——區域解碼Skia深入分析7——區域解碼

如圖所示在framework側建立 bitmapregiondecoder時,建立對應類型的skimagedecoder掃描全檔案,調用其onbuildtileindex方法建構tileindex,嵌入其關聯的skimagedecoder之中,在後續的 decoderegion調用時,使用 skimagedecoder的 ondecodesubset 方法做區域解碼。

3、jpeg的區域解碼

Skia深入分析7——區域解碼Skia深入分析7——區域解碼

在 onbuildtileindex 時,建立了huffman_index,其中的内容主要是一系列的huffman_offset,記錄每個block對應的偏移量。在解碼時,先移到對應block的位置,然後解出像素。

繼續閱讀