Changeset 7040 for trunk/Ohana/src/kapa/graph/PNGit.c
- Timestamp:
- May 2, 2006, 9:19:22 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/kapa/graph/PNGit.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/kapa/graph/PNGit.c
r5610 r7040 1 1 # include "Ximage.h" 2 # include <png.h>3 2 4 int PNGit _old() {3 int PNGit () { 5 4 6 5 FILE *f; … … 8 7 png_infop info_ptr; 9 8 png_color *palette; 10 int *pchoice;11 XColor color;12 png_byte **rows;13 int dx, dy;14 int i, j, k, found;15 9 int Npalette; 16 XImage *tmpimage;17 unsigned long pixel;18 10 char filename[1024]; 19 11 int Nbytes, status; 20 12 21 Npalette = GetColormapSize (); 22 ALLOCATE (pchoice, int, Npalette); 23 ALLOCATE (palette, png_color, Npalette); 13 bDrawBuffer *buffer; 24 14 25 dx = graphic.dx;26 dy = graphic.dy;27 28 15 /* expect a line telling the number of bytes and a filename */ 29 16 status = read (sock, filename, 16); … … 33 20 filename[status] = 0; /* make the string easy to parse */ 34 21 35 ALLOCATE (rows, png_byte *, dy);36 for (i = 0; i < dy; i++) {37 ALLOCATE (rows[i], png_byte, dx);38 }39 40 /* define the palette */41 for (i = 0; i < Npalette; i++) {42 color.pixel = graphic.color[i];43 XQueryColor (graphic.display, graphic.colormap, &color);44 palette[i].red = (0x100 * color.red / 0x10000);45 palette[i].green = (0x100 * color.green / 0x10000);46 palette[i].blue = (0x100 * color.blue / 0x10000);47 pchoice[i] = color.pixel;48 }49 50 22 f = fopen (filename, "w"); 51 23 if (f == (FILE *) NULL) { 52 24 fprintf (stderr, "can't open output file %s\n", "Xgraph.png"); 53 free (pchoice);54 free (palette);55 25 return (TRUE); /* true because otherwise it quits kapa! */ 56 26 } … … 58 28 png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, (png_voidp) NULL, (png_voidp) NULL, (png_voidp) NULL); 59 29 if (!png_ptr) { 30 fprintf (stderr, "can't get png structure\n"); 60 31 fclose (f); 61 fprintf (stderr, "can't get png structure\n");62 free (pchoice);63 free (palette);64 32 return (TRUE); 65 33 } … … 67 35 info_ptr = png_create_info_struct (png_ptr); 68 36 if (!info_ptr) { 37 fprintf (stderr, "can't get png info structure\n"); 69 38 png_destroy_write_struct (&png_ptr, (png_infopp) NULL); 70 39 fclose (f); 71 fprintf (stderr, "can't get png info structure\n");72 free (pchoice);73 free (palette);74 40 return (TRUE); 75 41 } 76 42 77 43 if (setjmp (png_ptr[0].jmpbuf)) { 44 fprintf (stderr, "can't get png return\n"); 78 45 png_destroy_write_struct (&png_ptr, &info_ptr); 79 46 fclose (f); 80 fprintf (stderr, "can't get png return\n");81 free (pchoice);82 free (palette);83 47 return (TRUE); 84 48 } … … 88 52 /* see docs for write-row-callback to provide progress info */ 89 53 90 png_set_IHDR (png_ptr, info_ptr, dx,dy, 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);54 png_set_IHDR (png_ptr, info_ptr, graphic.dx, graphic.dy, 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); 91 55 92 /* png_set_IHDR (png_ptr, info_ptr, dx,dy, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); */56 /* png_set_IHDR (png_ptr, info_ptr, graphic.dx, graphic.dy, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); */ 93 57 58 palette = KapaPNGPalette (&Npalette); 94 59 png_set_PLTE (png_ptr, info_ptr, palette, Npalette); 95 60 96 61 png_write_info (png_ptr, info_ptr); 97 62 98 /* a new attempt... */63 buffer = bDrawIt (); 99 64 100 { 101 XWindowAttributes WindowAttributes; 102 Pixmap tmp_pixmap; 103 Window tmp_window; 104 105 XGetWindowAttributes (graphic.display, graphic.window, &WindowAttributes); 106 107 tmp_pixmap = XCreatePixmap (graphic.display, graphic.window, dx, dy, WindowAttributes.depth); 108 109 tmp_window = graphic.window; 110 graphic.window = tmp_pixmap; 111 112 Refresh (1); 113 114 tmpimage = XGetImage (graphic.display, graphic.window, 0, 0, dx, dy, 0xffffffff, ZPixmap); 115 for (j = 0; j < dy; j++) { 116 for (i = 0; i < dx; i++) { 117 pixel = XGetPixel (tmpimage, i, j); 118 for (found = k = 0; (k < Npalette) && !found; k++) { 119 if (pixel == pchoice[k]) { 120 found = TRUE; 121 rows[j][i] = k; 122 } 123 } 124 } 125 } 126 graphic.window = tmp_window; 127 XFreePixmap (graphic.display, tmp_pixmap); 128 } 129 130 png_write_image (png_ptr, rows); 65 png_write_image (png_ptr, buffer[0].pixels); 131 66 png_write_end (png_ptr, info_ptr); 132 67 png_destroy_write_struct (&png_ptr, &info_ptr); 133 134 for (i = 0; i < dy; i++) { 135 free (rows[i]); 136 } 137 free (rows); 138 139 XDestroyImage (tmpimage); 140 68 69 bDrawBufferFree (buffer); 70 free (palette); 141 71 fclose (f); 142 free (pchoice);143 free (palette);144 72 return (TRUE); 145 73
Note:
See TracChangeset
for help on using the changeset viewer.
