diff --git a/src/psprint.c b/src/psprint.c index 5c778676..1d525868 100644 --- a/src/psprint.c +++ b/src/psprint.c @@ -25,7 +25,7 @@ #define Y_TO_PS(y) ( (y+xctx->yorigin)* xctx->mooz ) /* FIXME This must be investigated, without some fflushes the ps file is corrupted */ -#define FFLUSH_PS +//#define FFLUSH_PS #if 0 * /* FIXME: overflow check. Not used, BTW */ @@ -188,6 +188,8 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2, int rot, i unsigned char png_b = png_data[i + 2]; unsigned char png_a = png_data[i + 3]; + double ainv=((double)(0xFF - png_a)) / ((double)(0xFF)); + if(invertImage) { png_data[i + 0] = (0xFF-png_r) + (unsigned char)((double)BG_r * ainv); @@ -216,13 +218,32 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2, int rot, i * fclose(fp); */ hexEncodedJPG = bin2hex(jpgData, fileSize); - fprintf(fd, "gsave\n"); + fprintf(fd, "gsave\n"); fprintf(fd, "%g %g translate\n", X_TO_PS(x1), Y_TO_PS(y1)); - fprintf(fd, "%g %g scale\n", X_TO_PS(x2) - X_TO_PS(x1), Y_TO_PS(y2) - Y_TO_PS(y1)); - fprintf(fd, "%d\n", png_size_x); - fprintf(fd, "%d\n", png_size_y); + if(rot==1) fprintf(fd, "90 rotate\n"); + if(rot==2) fprintf(fd, "180 rotate\n"); + if(rot==3) fprintf(fd, "270 rotate\n"); + fprintf(fd, "%g %g scale\n", (X_TO_PS(x2) - X_TO_PS(x1))*0.97, (Y_TO_PS(y2) - Y_TO_PS(y1))*0.97); + + fprintf(fd, "%g\n", (double)png_size_x); + fprintf(fd, "%g\n", (double)png_size_y); fprintf(fd, "8\n"); - fprintf(fd, "[%d 0 0 %d 0 0]\n", png_size_x, png_size_y); + if(!flip) + { + if(rot==1) fprintf(fd, "[%g 0 0 %g 0 %g]\n", (double)png_size_y, (double)png_size_x, (double)png_size_y); + else if(rot==2) fprintf(fd, "[%g 0 0 %g %g %g]\n", (double)png_size_x, (double)png_size_y, (double)png_size_x, (double)png_size_y); + else if(rot==3) fprintf(fd, "[%g 0 0 %g %g 0]\n", (double)png_size_y, (double)png_size_x, (double)png_size_x); + else fprintf(fd, "[%g 0 0 %g 0 0]\n", (double)png_size_x, (double)png_size_y); + } + else + { + if(rot==1) fprintf(fd, "[%g 0 0 %g %g %g]\n", -(double)png_size_y, (double)png_size_x, (double)png_size_x, (double)png_size_y); + else if(rot==2) fprintf(fd, "[%g 0 0 %g 0 %g]\n", -(double)png_size_x, (double)png_size_y, (double)png_size_y); + else if(rot==3) fprintf(fd, "[%g 0 0 %g 0 0]\n", -(double)png_size_y, (double)png_size_x); + else fprintf(fd, "[%g 0 0 %g %g 0]\n", -(double)png_size_x, (double)png_size_y, (double)png_size_x); + } + + fprintf(fd, "(%s)\n", hexEncodedJPG); fprintf(fd, "/ASCIIHexDecode\n"); fprintf(fd, "filter\n"); @@ -233,11 +254,10 @@ void ps_drawPNG(xRect* r, double x1, double y1, double x2, double y2, int rot, i fprintf(fd, "3\n"); fprintf(fd, "colorimage\n"); fprintf(fd, "grestore\n"); - #ifdef FFLUSH_PS /* FIXME: why is this needed? */ - fflush(fd); - #endif + my_free(1663, &hexEncodedJPG); free(jpgData); + fflush(fd); } @@ -345,12 +365,11 @@ void ps_embedded_graph(xRect* r, double rx1, double ry1, double rx2, double ry2) fprintf(fd, "3\n"); fprintf(fd, "colorimage\n"); fprintf(fd, "grestore\n"); - #ifdef FFLUSH_PS /* FIXME: why is this needed? */ - fflush(fd); - #endif my_free(1666, &hexEncodedJPG); free(jpgData); + fflush(fd); #endif + } static void set_lw(void) {