在為數眾多的 smart phone 產品中,都採用 QVGA(240x320)規格的 TFT-LCD panel,而這些 panel 都是 6x6x6 的 RGB 格式。因此,許多專為 mobile device 所發展的 rendering/text library 都會建議以此格式(6x6x6 RGB)來進行圖形介面與 art work 的設計。
比較另人好奇的地方是,6x6x6 的 RGB 格式要怎麼與 Linux kernel 的 framebuffer 驅動程式做對應。對 linux framebuffer 驅動程式有經驗的朋友都曉得,Linux framebuffer 驅動程式的 pixel format 為 4/8/16/24/32 BPP,可是我們的顯示 panel 是 18 BPP(6x6x6)的格式,要怎麼對應呢?
這是一個觀念問題。在數像處理的理論中,6x6x6 與 8x8x8 的 RGB 色彩「理論」上可視為相同,因為對人眼來說,少掉 1 或 2 個「bit plane」是對原來的圖像沒有影響的;不過,實際應用上仍會有一些「色差」的問題,所以需要一些方法來做「色差校對」。上週有一位朋友問到這個問題,利用端午佳節 google 了一些文獻,得到幾個簡單的方法,有機會再與大家分享。
由此可知,18 BPP 的 pixel format 在 Linux framebuffer 驅動程式中,可視為 8x8x8 即 24 BPP 的方式來處理。考量到 pixel 在記憶體的排列方式,以 s3c2410 為例,由於 1 pixel 佔用 1 word(4 bytes)的空間,所以用 0888 即 32 BPP 的方式來處理才方便。
對美工軟體來說,雖然我們的 panel 只能顯示 18 BPP 的顏色,但是對 art work 來說,只需要以傳統的 true color(0888 RGB)方式來繪圖即可,並不需要做特殊處理,也不需要特殊的繪圖軟體。而且,在大多數的例子中,也不需要考慮色差校對的問題。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw