#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <png.h>
#define MAX_Y 200
#define MAX_X 100

int main(int argc, const char **argv)
{
  int i, j;
  char map1[MAX_Y][MAX_X]; /* 書き込みたいデータ */
  uint8_t pngbuf[MAX_Y*MAX_X]; /* libpngのためのバッファ */
  /* for libpng */
  png_image image;
  uint32_t stride;
  memset(&image, 0, sizeof image);
  /* 画像の大きさを指定 */
  image.height = MAX_Y;
  image.width = MAX_X;
  /* 画像のフォーマットを指定(RGB, GRAYなどなど) */
  image.format = PNG_FORMAT_GRAY;
  /* libpngのバージョンを画像に埋め込む */
  image.version = PNG_IMAGE_VERSION;
  /* PNG_IMAGE_ROW_STRIDEマクロで必要な大きさを計算してくれる
   * (png_image_write_to_fileで使う) */
  stride = PNG_IMAGE_ROW_STRIDE(image);
  /* libpng ここまで */

  /* 実際にいじるのはここだけ 
   * pngにするためのバッファへデータをコピー
   * ただし、0~255 の範囲で黒から白を表すので255倍してる 
   * pngbufは1次元化しているので「横幅×縦方向の現在位置+横方向の現在位置」*/
  memset(map1, 1, sizeof(char)*MAX_Y*MAX_X); /* map1 を char型の 1 で埋め尽くす */
  for (j = 0; j < MAX_Y; j++){
    for (i = 0; i < MAX_X; i++){
      pngbuf[MAX_X*j + i] = 255*(uint8_t)map1[j][i];
    }
  }
  /* for libpng */
  png_image_write_to_file(&image, "test.png", 0/*convert_to_8bit*/, pngbuf, stride, NULL/*colormap*/);
  /* libpng ここまで */
  return 0;
}