你是否經常爲進入一個自己喜歡的遊戲(或場景切換)而看着加載進度條焦急等待!
作爲程序員的你是否對此毫無辦法:
bmp格式,格式簡單解碼快速(相當於內存拷貝),但需要佔用龐大的磁盤空間,而磁盤速度和內存速度幾乎差2個數量級!
jpg格式,文件佔用空間很小,但解碼很複雜,速度很慢,不支持alpha通道; 爲了優化解碼速度,針對CPU特殊指令集開發優化的特殊解碼器版本,或專門開發用GPU解碼的版本,還是寄希望於運行的環境有硬件解碼器?
png格式,文件佔用空間中等,無損壓縮,支持alpha通道; 但解碼速度很慢;
有沒有同時考慮文件大小和解碼速度而設計的圖像文件格式嗎?
在3D遊戲領域產生了一些類似目的的資源圖像格式,比如: S3TC(DXTC),FXT1,ASTC等 (當然,節省顯存可能是更重要的設計目的)
它們一般壓縮率固定,圖像格式簡單,編解碼快速(應用時甚至不需要解壓); 缺點是壓縮率中等,壓縮質量無法控制,很多種類的圖像壓縮後質量損失過大,在精美的圖像和2D應用中較少採用;
能不能設計一種質量可控,文件佔用較小,而又能快速解碼的圖像格式呢?
這正是FRG("Fast Read Graphics" or "Fast Resource Graphics")的設計目的;FRG的設計目的不是爲了增加一種通用的圖像交換格式(google的webp到現在都很難做到); 它只完成它的設計目標所要求的事,它不是面向最終用戶的,它應該只存在於發佈包的資源裏;
FRG是一種優化從磁盤加載和解碼到顯示需要的時間的圖像文件格式;(性能測試: http://blog.csdn.net/housisong/article/details/9071113 );
FRG支持無損壓縮,也支持有質量損失的壓縮,支持32bitARGB顏色(當前的實現Alpha通道始終無損壓縮); FRG的使用場景: 需要爲資源圖像文件減少大小,又要求能夠快速解碼顯示,編碼好的文件一般隨應用程序發佈,而不太在意編碼時的時間和內存空間佔用;
試試FRG,讓你的遊戲和應用加載不再需要用戶等待!
圖像文件格式和其文件大小(無損情況下):
bmp(ARGB32bit) : 481,654 Bytes
png : 121,363 Bytes
jpg(100 quality) : 94,696 Bytes(no alpha)
jpg2000(100 quality) : 117,796 Bytes
tiff(LZW) : 211,980 Bytes
frg(100 quality)(0 size): 182,865 Bytes
FRG有損壓縮下的文件:
frg(90 quality)(0 size): 102,541 Bytes frg(80 quality)(0 size): 66,659 Bytes
frg(75 quality)(0 size): 40,982 Bytes
(更多壓縮質量展示:http://blog.csdn.net/housisong/article/details/9068535 )
演示程序和源代碼:
演示程序:
我提供了windows\macosx\linux系統下的命令行程序,(我沒有發佈macosx\linux下程序的經驗,本機上試過,但不知道能否在別的電腦上執行;) 程序提供了png和frg之間的相互轉換功能(注意不要把你的png圖片覆蓋了)。
演示程序下載:
https://github.com/sisong/png2frg_app/archive/master.zip
FRG源代碼:
FRG使用非常自由的MIT開源授權協議;
項目地址: https://github.com/sisong/libfrg
歡迎使用和給該項目貢獻你的代碼!
(編碼技術介紹:http://blog.csdn.net/housisong/article/details/9078301 )
(有些有趣的特性支持也在進一步考慮中: 比如一種更友好的內存或顯存中的壓縮格式\更好的編碼質量和大小控制能力\更多輸出顏色格式的直接支持?\新的最終用戶級編碼器\支持感興趣區域使用更高質量參數\等)