1. 程式人生 > >在Linux控制檯下顯示JPEG影象

在Linux控制檯下顯示JPEG影象

另外一個需要說明地方是:由於作者所用的Framebuffer裝置的顏色深度為16位,顏色格式為5-6-5格式——即R(紅色)在16bit中佔據高5位,G(綠色)在16bit中佔據中間6位,B(藍色)在16bit中佔據低5位;而libjpeg解壓出來的影象資料為24RGB格式,因此必須進行轉換。對於24位的RGB,每個位元組表示一個顏色分量,因此轉換的方式為:對於R位元組,右移3位,對於G位元組,右移2位,對於B位元組,右移3位,然後將右移得到的值拼接起來,就得到了16位的顏色值。在後面的程式中,將把24位的顏色稱為RGB888,而把16位顏色值稱為RGB565,這種命名方式可能不太規範,不過無論如何,在本文中就這樣稱呼了。另外,讀者可能會想到,上面這種直接將顏色分量的低位丟棄的方式不是會導致影象細節的丟失嗎?比如,對於
24位顏色的R位元組,假如原來低3位的值在0~7之間均勻分佈,轉換之後,所有這低3位的值全部都變成了0,這就是顏色細節的丟失。為了處理這個問題,可以採用誤差擴散演算法或者抖動演算法來完成顏色轉換。為了保持程式的簡單,本文中仍然只採用上面提到的最簡單的轉換方式——而且事實表明,這樣做得到的結果並不差。