/* create a windows bitmap from raw pixel array */


void createBmpFile (char image[1024][1024], char *filename);

void
createBmpFile (char image[1024][1024], char *filename)
{
  char aBB[131072];		/* bit mapt bits, in bytes */
  int i, j, k;
  int cnt, pd, newbit;
  char list1[62];
  int list2[62] =		/* bmp header data, for 1024x1024 monchome bm */
  {66, 77, 62, 0, 2, 0, 0, 0,
   0, 0, 62, 0, 0, 0, 40, 0,
   0, 0, 0, 4, 0, 0, 0, 4,
   0, 0, 1, 0, 1, 0, 0, 0,
   0, 0, 0, 0, 2, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 2, 0,
   0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, -1, -1, -1, 0};

  FILE *fp;

  for (i = 0; i < 62; i++)	/* convert to byte format */
    list1[i] = (char) (list2[i]);

/*pack image into array of bytes. */
  cnt = 0;
  for (i = 1023; i >= 0; i--) {
    j = 0;
    while (j < 1024) {
      pd = 0;
      for (k = 0; k < 8; k++) {	/* copy next 8 pixel values to a byte */
	if (image[i][j] != 0)
	  newbit = 1;
	else
	  newbit = 0;
	pd = (pd << 1) + newbit;	/* shift and add lastest bit */
	j++;
      }
      aBB[cnt] = pd;		/* store packed bits into byte array */
      cnt++;
    }
  }

/* open file and write data */
  fp = fopen (filename, "w");

  fwrite (list1, sizeof (list1[0]), 62, fp);
  fwrite (aBB, sizeof (aBB[0]), 131072, fp);
}
