title: 8Bit Grayscale Bitmap to Array
body: <p>I am wondering, from here how would I go about storing the pixel values into a matrix? I would like to print out the intensity (grayscale) value.</p>
  
  <p>Example Array[5] = 4 Or Array[3][1] = 17</p>
  
  <p>I really have no idea how to go about this. All the examples I see seem way to complicated, is there a simple way to do this?</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  
  struct BitMap
  {
  short Type;
  long Size;
  short Reserve1;
  short Reserve2;
  long OffBits;
  long biSize;
  long biWidth;
  long biHeight;
  short biPlanes;
  short biBitCount;
  long biCompression;
  long biSizeImage;
  long biXPelsPerMeter;
  long biYPelsPerMeter;
  long biClrUsed;
  long biClrImportant;
  }Header;
  
  int main( void ){
  
      FILE *BMPFile = fopen ("MriHotrod.bmp", "rb");
  
      if(BMPFile == NULL){
          return;
      }
  
      unsigned char DataBuff[128*128];
      int i;
      int j;
  
      memset(&amp;Header, 0, sizeof(Header));
  
      fread(&amp;Header.Type, 2, 1, BMPFile);
      fread(&amp;Header.Size, 4, 1, BMPFile);
      fread(&amp;Header.Reserve1, 2, 1, BMPFile);
      fread(&amp;Header.Reserve2, 2, 1, BMPFile);
      fread(&amp;Header.OffBits, 4, 1, BMPFile);
      fread(&amp;Header.biSize, 4, 1, BMPFile);
      fread(&amp;Header.biWidth, 4, 1, BMPFile);
      fread(&amp;Header.biHeight, 4, 1, BMPFile);
      fread(&amp;Header.biPlanes, 2, 1, BMPFile);
      fread(&amp;Header.biBitCount, 2, 1, BMPFile);
      fread(&amp;Header.biCompression, 4, 1, BMPFile);
      fread(&amp;Header.biSizeImage, 4, 1, BMPFile);
      fread(&amp;Header.biXPelsPerMeter, 4, 1, BMPFile);
      fread(&amp;Header.biYPelsPerMeter, 4, 1, BMPFile);
      fread(&amp;Header.biClrUsed, 4, 1, BMPFile);
      fread(&amp;Header.biClrImportant, 4, 1, BMPFile);
  
  printf("\nType:%hd\n", Header.Type);
  printf("Size:%ld\n", Header.Size);
  printf("Reserve1:%hd\n", Header.Reserve1);
  printf("Reserve2:%hd\n", Header.Reserve2);
  printf("OffBits:%ld\n", Header.OffBits);
  printf("biSize:%ld\n", Header.biSize);
  printf("Width:%ld\n", Header.biWidth);
  printf("Height:%ld\n", Header.biHeight);
  printf("biPlanes:%hd\n", Header.biPlanes);
  printf("biBitCount:%hd\n", Header.biBitCount);
  printf("biCompression:%ld\n", Header.biCompression);
  printf("biSizeImage:%ld\n", Header.biSizeImage);
  printf("biXPelsPerMeter:%ld\n", Header.biXPelsPerMeter);
  printf("biYPelsPerMeter:%ld\n", Header.biYPelsPerMeter);
  printf("biClrUsed:%ld\n", Header.biClrUsed);
  printf("biClrImportant:%ld\n\n", Header.biClrImportant);
  
  fread(DataBuff, sizeof(DataBuff), 128*128, BMPFile);
  
  for(i=0; i&lt;20; i++){
      printf("%d\n", DataBuff[i]);
  }
  
  fclose(BMPFile);
  
  return 0;
  }
  
  Output
  Type:19778
  Size:17462
  Reserve1:0
  Reserve2:0
  OffBits:1078
  biSize:40
  Width:128
  Height:128
  biPlanes:1
  biBitCount:8
  biCompression:0
  biSizeImage:0
  biXPelsPerMeter:0
  biYPelsPerMeter:0
  biClrUsed:256
  biClrImportant:0
  
  0
  0
  0
  0
  1
  1
  1
  0
  2
  2
  2
  0
  3
  3
  3
  0
  4
  4
  4
  0
  </code></pre>
  
  <p>I think the header info is correct, and the number of elements is correct (16384). I am just unsure how to print out the pixel values. The above is clearly not right...</p>
  
  <p>Does this have to do with padding?</p>
  
  <p>Thanks!</p>