2010-10-28 37 views
1

這是在一次採訪中提出的,我似乎找不到任何線索。問題是:在一個字節數組中存儲像素

我有40 x 20的屏幕,我想將這些像素存儲在一個字節數組中,這樣我就可以從字節數組重新構造這個屏幕。字節數組的大小是100字節。

查看它的另一種方法是。我們如何使用一個位來存儲單個像素(x,y)。因爲,有40 * 20 = 800像素,我們有100個字節。

任何提示/想法或引用鏈接將有助於

感謝, 錢德爾

+0

一個初步的觀察可能是你可以使用掩碼來設置你想要的位? – brumScouse 2010-10-28 18:08:34

+1

正如你在談論位,我猜你的屏幕是單色的。 – Gumbo 2010-10-28 18:08:42

+0

您需要了解位打包和解包。 – 2010-10-28 18:12:55

回答

1

一個字節是8位。所以你可以用這100個字節存儲100字節·8位/字節= 800位的信息。

由於每位可以有兩個值(0,1),所以每個位只能表示兩個狀態。在屏幕的情況下,這兩種狀態可以是上 0 = 黑色和1 = 白色或0 = 和1 = 光。

而你有800位,你可以用這800位代表你的40·20像素= 800像素,每一位代表兩種狀態之一。

1

我想你要找的字是bitmap。屏幕上80字節= 1像素中的每一位(0 =黑色,1 =白色)。

您不需要更多,因爲輸出的形狀是給定的。

0

假設,如果你有40x20像素表示的像素和說這是形式的輸入

字節[] []輸入= {1,0,1 ...}中的每個條目是一個像素值,以在商店中的字節數組你可以做,

for(int i=0...width) 
    for(int j=0...height) 
    byteArr[pos]|=input[i][j]<<j 

這意味着對於每個單個位置,只需OR 8的信息位從原來的數組來存儲作爲單一的值,將它轉換回只是把每個byteArr [索引]並通過向右移位(>> pos)從0..8位抽取每個位。

另一個問題是要問是如果你正在使用big-endian或little-endian,目前我認爲該數組是小endian

相關問題