2017-10-20 248 views
0

1) 我想知道24位圖圖像中紅色的值。24位圖圖像和16位圖圖像中的RGB顏色

像素由24位數據,其中,存在用於每一個紅色,綠色和藍色(RGB)的8位值

假設我打開24位圖圖像,並保存在無符號字符陣列A中的數據表示的

i,e)(A [0],A [1],A [2])是24位圖圖像的第一個像素值。

那麼紅色的價值是什麼?

我認爲24位圖圖像的顏色順序(?)是'RGB',所以A [0]是紅色的顏色值。我對嗎?

2) 在16位圖像中,像素由16位表示,其中紅色,綠色和藍色(RGB)值分別爲5位。

假設我打開16位圖圖像,並保存在無符號短數組數據B.

I,E)B [0]是16位圖圖像的第一像素值。

在這種情況下,我想知道紅色的價值。

我認爲最後5位,I,E) 'A [0] & 31' 是自16位圖圖像的顏色順序(θ)爲 'RGB'

我是藍顏色的值對?

+1

你爲什麼猜測,而不是使用庫? – stark

+1

藍色是最不重要的位,最多紅色。如果圖像是在大型機器上生成的,機器的排序會起到一定的作用,因此越來越不太可能,那麼就可以方便地討論BGR。所以A [0]通常有藍色,對於16bpp你必須使用0x1f。請注意,對於16bpp,565並不少見。忽略所有這些並且只使用32bpp是明智的,通過用int *來尋址像素,字節細節消失。 –

回答

0

位圖可能很難在源代碼中檢索其數據。你首先必須解析文件的頭部和頭部,你必須解析它和它的數據,以知道你正在使用的是什麼類型的位圖圖像。位圖有很多信息存儲。從邏輯上講,如果位圖圖像是24位而沒有透明度值(特別是RGB類型),則需要知道圖像是否被壓縮,以及壓縮方法以及文件的其他屬性(如調色板信息,圖標信息等)。所以你知道在那個特定文件中找到實際像素數據的位置。在提取原始數據之後,您需要知道信息的存儲方式。以下是它可能會變得棘手:它可能是一個RGB圖像,但數據可以以直接的RGB順序存儲在文件中,或者它可以反轉BGR。之後,就需要知道圖像數據的存儲方向,以及是否需要垂直,水平或兩者翻轉。除此之外,如果顏色數據是正確的順序和圖像是在正確的方向沒有壓縮,那麼它應該是沒有結構化的,因爲這對於無符號字符值的疑問:

位圖的24位 - 第24/3號爲RGB給每個通道8bit或每個通道1byte。 由於無符號字符的內存寬度爲1字節,因此 相應順序中的每個字節將表示每個顏色通道。考慮以下幾點:


// Considering data is in RGB order: 
unsigned char colorData[3];  // Integer Base Range 
colorData[0] = red byte   [0, 255] 
colorData[1] = green byte  [0, 255] 
colorData[2] = blue byte   [0, 255] 

至於位圖文件的內部結構(S)這裏是分析其數據的良好來源:bmp