#include #include #include #include #include #include #include #include /* TODO: */ /* 40x48 images */ /* 80x40, 80x48 double-highres images */ int main(int argc, char **argv) { int image[40][40]; int x,y; FILE *infile,*outfile; int debug=0; if (argc<3) { fprintf(stderr,"Usage:\t%s INFILE OUTFILE\n\n",argv[0]); exit(-1); } outfile=fopen(argv[2],"w"); if (outfile==NULL) { fprintf(stderr,"Error! Could not open %s\n",argv[2]); exit(-1); } int width, height; png_byte color_type; png_byte bit_depth; png_structp png_ptr; png_infop info_ptr; int number_of_passes; png_bytep * row_pointers; unsigned char header[8]; /* open file and test for it being a png */ infile = fopen(argv[1], "rb"); if (infile==NULL) { fprintf(stderr,"Error! Could not open %s\n",argv[1]); exit(-1); } /* Check the header */ fread(header, 1, 8, infile); if (png_sig_cmp(header, 0, 8)) { fprintf(stderr,"Error! %s is not a PNG file\n",argv[1]); exit(-1); } /* initialize stuff */ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) { fprintf(stderr,"Error create_read_struct\n"); exit(-1); } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { fprintf(stderr,"Error png_create_info_struct\n"); exit(-1); } png_init_io(png_ptr, infile); png_set_sig_bytes(png_ptr, 8); png_read_info(png_ptr, info_ptr); width = png_get_image_width(png_ptr, info_ptr); height = png_get_image_height(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); if (debug) { printf("PNG: width=%d height=%d depth=%d\n",width,height,bit_depth); } number_of_passes = png_set_interlace_handling(png_ptr); png_read_update_info(png_ptr, info_ptr); row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); for (y=0; y0x3f8) break; enough++; if (enough>119) { fputc(0,outfile); fputc(0,outfile); fputc(0,outfile); fputc(0,outfile); fputc(0,outfile); fputc(0,outfile); fputc(0,outfile); fputc(0,outfile); enough=0; } col++; if (col>39) { col=0; row+=16; if (row>47) row-=46; } } fclose(outfile); return 0; }