代码之家  ›  专栏  ›  技术社区  ›  Chander Shivdasani

在字节数组中存储像素

  •  1
  • Chander Shivdasani  · 技术社区  · 15 年前

    这是在一次采访中被问到的,我似乎找不到任何线索。问题是:

    我有40 x 20屏幕,我想把这些像素存储在一个字节数组中,这样我就可以从字节数组重新构造这个屏幕。字节数组的大小为100字节。

    另一种看待它的方式是。我们如何使用一个位来存储单个像素(x,y)。因为有40*20=800像素,我们有100字节。

    任何提示/想法或参考链接都会有帮助

    谢谢, 钱德尔

    3 回复  |  直到 11 年前
        1
  •  1
  •   Gumbo    15 年前

    一个字节是8位。因此,您可以使用这些100字节存储100字节_8位/字节=800位信息。

    因为每个位可以有两个值(0,1),所以每个位只能表示两个状态。在屏幕的情况下,这两个状态可以是0= 黑色 1 = 白色 或0= 熄灯 1 = 光照 .

    当你有800位的时候,你可以用这800位来表示你的40_·20像素=800像素,每一位代表两种状态之一。

        2
  •  1
  •   egrunin    15 年前

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

    您不需要更多,因为输出的形状是给定的。

        3
  •  0
  •   jamb    11 年前

    假设您有以40x20像素表示的像素,并假设这是表单中的输入

    byte[][]input=1,0,1…每个条目都是一个像素值,要将其存储在字节数组中,您可以这样做,

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

    这意味着对于每个单个位置,仅从原始数组中存储或8位信息作为单个值,将其转换回每个字节数[索引]并从0..8到右移位(>>位置)中提取每个位。

    另一个问题是问您是使用big-endian还是little-endian,目前我假设数组是little-endian