RGB 色彩模型基礎
RGB 為加色混合模型,工業標準色彩空間。各分量 0-255 對應亮度。長整數表示公式:65536 * Blue + 256 * Green + Red。
常見格式位元分配
- RGB888 (24-bit):R8 G8 B8
- RGB565 (16-bit):R5 G6 B5
- RGB555 (16-bit):R5 G5 B5 (保留 1-bit)
- RGB32 (32-bit):通常為 ARGB8888 或 XRGB8888 (A8 R8 G8 B8)
量化壓縮:高位元截斷 (24-bit → 16-bit)
RGB888: R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0
RGB565: R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3
直接取各分量高 5/6/5 位,低位元捨棄 → 精度損失。
量化補償:低位元擴展 (16-bit → 24-bit)
無補償 (單純左移)
RGB565: R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0
RGB888: R4 R3 R2 R1 R0 0 0 0 G5 G4 G3 G2 G1 G0 0 0 B4 B3 B2 B1 B0 0 0 0
低位元全 0,顏色階調不連續。
線性量化補償 (推薦)
RGB888: R4 R3 R2 R1 R0 R2 R1 R0 G5 G4 G3 G2 G1 G0 G1 G0 B4 B3 B2 B1 B0 B2 B1 B0
原則:
- 原資料填入高位元
- 低位元用原資料低位元循環填補
- 若仍有剩餘位元,繼續循環填補
此為線性內插近似,可證明誤差均勻分佈,視覺品質最佳。
轉換演算法總結
RGB888 → RGB565 (量化壓縮)
- R:取 Byte0 高 5 位 → 置入 Byte1 高 5 位
- G:取 Byte1 高 3 位 → 置入 Byte1 低 3 位;取 Byte1 第 4-6 位 → 置入 Byte0 高 3 位
- B:取 Byte2 高 5 位 → 置入 Byte0 低 5 位
RGB565 → RGB888 (量化補償)
- R:Byte0 低 5 位 → Byte0 高 5 位,低 3 位用原低 3 位循環補 (R2 R1 R0)
- G:Byte1 低 3 位左移 5 位 + Byte0 高 3 位右移 3 位合併 6 位 → Byte1,低 2 位用原低 2 位循環補 (G1 G0)
- B:Byte1 高 5 位 → Byte2 高 5 位,低 3 位用原低 3 位循環補 (B2 B1 B0)
實作建議
- 使用查表法 (256-entry LUT) 加速 5/6-bit ↔ 8-bit 轉換
- SIMD 指令集 (NEON/SSE) 可並行處理多像素
- 注意記憶體對齊與 Endianness