#include #include #include #define WIDTH 256 #define HEIGHT 256 int main (int argc, char** argv) { png_structp png_ptr; png_infop png_info; png_byte** image; unsigned i; unsigned x, y; unsigned char s1, s2; unsigned intensity; if (argc > 1) intensity = atoi (argv[1]); else intensity = 1; png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); png_info = png_create_info_struct (png_ptr); png_init_io (png_ptr, stdout); png_set_IHDR (png_ptr, png_info, WIDTH, HEIGHT, 16, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); image = malloc (sizeof (png_bytep) * HEIGHT); for (i = 0; i < HEIGHT; ++i) { image[i] = malloc (sizeof (png_byte) * WIDTH * 6); } // Max out all alpha channels for (y = 0; y < HEIGHT; ++y) { for (x = 0; x < WIDTH; ++x) { image[y][x*6+1] = 255; image[y][x*6+3] = 255; image[y][x*6+5] = 255; } } s1 = fgetc (stdin); while (!feof (stdin)) { s2 = s1; s1 = fgetc (stdin); image[s1][s2*6] = image[s1][s2*6+2] = image[s1][s2*6+4] = image[s1][s2*6] + intensity > 255 ? 255 : image[s1][s2*6] + intensity; } png_write_info (png_ptr, png_info); png_write_image (png_ptr, image); png_write_end (png_ptr, png_info); png_destroy_write_struct (&png_ptr, &png_info); return 0; }