2013-08-19 38 views
1

通常,最常見的RGB格式似乎是24位RGB(每個通道8位)。然而,歷史上,RGB已經以許多其他格式表示,如including 3-bit RGB (1-bit per channel), 6-bit RGB (2-bits per channel), 9-bit RGB (3-bits per channel)等。N位RGB位圖的位圖存儲/內存表示

當N位RGB文件的值不是8的倍數時,這些位圖通常如何在內存中表示?例如,如果我們有6位RGB,則意味着每個像素都是6位,因此每個像素都不能通過現代計算機直接尋址而不使用按位操作。

那麼,將N位RGB文件簡單地轉換爲每個像素具有可尋址大小的位圖(例如,將6位轉換爲8位)是否是常見做法?還是僅僅使用按位操作來操作像素大小不可尋址的位圖更爲常見?

那麼磁盤存儲呢?比如說,如何在磁盤上存儲6位RGB文件,而位圖的最後一個字節甚至可能不包含完整像素?

回答

0

圖像往往很重,帶寬在傳輸時很關鍵。因此,每個通道圖像的6位是一個合理的選擇,如果在色度有些損失是可以接受的

如何,也就是說,一個6位的RGB文件存儲在磁盤上,當最後一個(通常是帶有紋理和照片不明顯)字節 位圖甚至可能不包含完整像素?

如果存儲的最小單位是字節,那麼是的,你需要添加一些填充爲8位對齊。這很好,因爲與每通道8位圖像相比節省空間可能相當大。

可以被6整除的2值的冪非常大。紅色和藍色通道有5位,綠色通道有6位,總數爲每像素16位。 R5G6B5是一種非常常見的像素格式。

0

考古挖掘道歉,但我無法抗拒,因爲沒有好的答案恕我直言。

在過去,內存是計算機中最昂貴的部分。現在內存很便宜,所以在現代硬件中處理N位通道圖像的最明智的方法是將每個通道的每個通道炸成適合您的API或硬件(通常爲8位)的位數。

對於文件,你可以這樣做,因爲現在磁盤空間也很便宜。 (你可以使用的許多壓縮文件格式之一在那裏。)

這就是說,它在過去的日子,當這些格式是常見的工作方式是這樣的:

每比特的總數像素不是8的倍數,但每個掃描行的像素數總是8的倍數。在這種情況下,您可以將掃描行存儲爲「一次一位」,並且不會浪費任何存儲空間。因此,如果你的像素是每像素9位,掃描線是320像素,你將有320/8 = 40個字節包含每個像素的位#0,接着是包含所有位#1的40個字節等。直至幷包括位#8。因此,掃描線的所有像素信息都將精確到360字節。

視頻芯片與內存有不同的硬件接線,因此渲染這樣的掃描線速度很快。實際上,這是實現可變數量位/像素硬件支持的最簡單方法:一次從N個地址中提取位。

請注意,根據您使用的總位數,此方法不會更改掃描線中像素編號X的位數所需的「位移」數量。您只需一次讀取較少的地址。