--- CV/CV.xs 2003/11/05 00:22:22 1.3 +++ CV/CV.xs 2003/11/08 18:22:21 1.4 @@ -7,6 +7,60 @@ #include #include +static guint32 a85_val; +static guint a85_cnt; +static guchar a85_buf[80], *a85_ptr; + +static void +a85_init (void) +{ + a85_cnt = 4; + a85_ptr = a85_buf; +} + +static void +a85_push (PerlIO *fp, guchar c) +{ + a85_val = a85_val << 8 | c; + + if (!--a85_cnt) + { + a85_cnt = 4; + if (a85_val) + { + a85_ptr[4] = (a85_val % 85) + 33; a85_val /= 85; + a85_ptr[3] = (a85_val % 85) + 33; a85_val /= 85; + a85_ptr[2] = (a85_val % 85) + 33; a85_val /= 85; + a85_ptr[1] = (a85_val % 85) + 33; a85_val /= 85; + a85_ptr[0] = (a85_val ) + 33; + + a85_ptr += 5; + } + else + *a85_ptr++ = 'z'; + + if (a85_ptr >= a85_buf + sizeof (a85_buf) - 7) + { + *a85_ptr++ = '\n'; + PerlIO_write (fp, a85_buf, a85_ptr - a85_buf); + a85_ptr = a85_buf; + } + } + +} + +a85_finish (PerlIO *fp) +{ + while (a85_cnt != 4) + a85_push (fp, 0); + + *a85_ptr++ = '~'; // probably buggy end-marker + *a85_ptr++ = '>'; // probably buggy end-marker + *a85_ptr++ = '\n'; + + PerlIO_write (fp, a85_buf, a85_ptr - a85_buf); +} + MODULE = Gtk2::CV PACKAGE = Gtk2::CV::ImageWindow PROTOTYPES: ENABLE @@ -54,7 +108,7 @@ for (y = 0; y < h; y++) for (x = 0; x < w; x++) for (i = 0; i < bpp; i++) - dst[(w - x) * bpp + y * dstr + i] = src[x * bpp + y * sstr + i]; + dst[(w - 1 - x) * bpp + y * dstr + i] = src[x * bpp + y * sstr + i]; } OUTPUT: RETVAL @@ -133,5 +187,30 @@ OUTPUT: RETVAL +MODULE = Gtk2::CV PACKAGE = Gtk2::CV::PostScript + +void +dump_pb (PerlIO *fp, GdkPixbuf *pb) + CODE: +{ + int w = gdk_pixbuf_get_width (pb); + int h = gdk_pixbuf_get_height (pb); + int x, y, i; + guchar *dst; + int bpp = gdk_pixbuf_get_has_alpha (pb) ? 4 : 3; + guchar *src = gdk_pixbuf_get_pixels (pb); + int sstr = gdk_pixbuf_get_rowstride (pb); + + a85_init (); + + for (y = 0; y < h; y++) + for (x = 0; x < w; x++) + for (i = 0; i < 3; i++) + a85_push (fp, src [x * bpp + y * sstr + i]); + + a85_finish (fp); +} + +