- png_init_io(pngs,out);
- png_set_IHDR(pngs,pngi,w,h,8,PNG_COLOR_TYPE_GRAY,PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
- for(i=0;i<h;++i)
- rows[i]=(png_byte *)(data+i*w);
- png_set_rows(pngs,pngi,rows);
- png_write_png(pngs,pngi,PNG_TRANSFORM_IDENTITY,NULL);
- png_destroy_write_struct(&pngs,&pngi);
+ png_init_io(pngs, out);
+ if(alpha)
+ {
+ data2=(png_byte *)malloc(w*h*2);
+ for(i=0; i<w*h; ++i)
+ {
+ data2[i*2]=255;
+ data2[i*2+1]=255-data[i];
+ }
+ for(i=0; i<h; ++i)
+ rows[i]=(png_byte *)(data2+i*w*2);
+ color=PNG_COLOR_TYPE_GRAY_ALPHA;
+ }
+ else
+ {
+ for(i=0; i<h; ++i)
+ rows[i]=(png_byte *)(data+i*w);
+ color=PNG_COLOR_TYPE_GRAY;
+ }
+ png_set_IHDR(pngs, pngi, w, h, 8, color, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+ png_set_rows(pngs, pngi, rows);
+ png_write_png(pngs, pngi, PNG_TRANSFORM_IDENTITY, NULL);
+ png_destroy_write_struct(&pngs, &pngi);
+ if(alpha) free(data2);
+
+ if(verbose) printf("Saved %dx%d PNG image to %s\n", w, h, fn);