xscreenshot

screen capture tool (mirror)
git clone git://git.2f30.org/xscreenshot
Log | Files | Refs | README | LICENSE

commit 8a6fbfbed1428dc71588d6a1b86730e0da055163
parent cb8ad238bc437ee427cddac7507d90d89dc7051c
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Mon, 16 Nov 2015 17:50:12 +0100

add farbeld support, kudos to z3bra!

Diffstat:
MREADME | 8++++----
Mxscreenshot.c | 13+++++++++----
2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/README b/README @@ -13,8 +13,8 @@ Dependencies Optional dependencies --------------------- -- To convert imagefile data you can use if2png from: - http://git.2f30.org/imagefile +- To convert farbfeld data you can use ff2png from: + http://git.2f30.org/farbfeld Compile ------- @@ -26,8 +26,8 @@ $ make Usage ----- -xscreenshot [winid] > file.if -if2png < file.if > file.png +xscreenshot [winid] > file.ff +ff2png < file.ff > file.png Known issues diff --git a/xscreenshot.c b/xscreenshot.c @@ -4,6 +4,7 @@ #include <string.h> #include <stdlib.h> #include <errno.h> +#include <endian.h> #include <X11/X.h> #include <X11/Xlib.h> @@ -32,6 +33,7 @@ main(int argc, char *argv[]) Window win; XWindowAttributes attr; uint32_t tmp, w, h; + uint16_t rgba[4]; dpy = XOpenDisplay(NULL); if(!dpy) @@ -59,7 +61,7 @@ main(int argc, char *argv[]) die("Can't XGetImage"); /* write header with big endian width and height-values */ - fprintf(stdout, "imagefile"); + fprintf(stdout, "farbfeld"); tmp = htonl(img->width); fwrite(&tmp, sizeof(uint32_t), 1, stdout); tmp = htonl(img->height); @@ -69,9 +71,12 @@ main(int argc, char *argv[]) for(h = 0; h < (uint32_t)img->height; h++) { for(w = 0; w < (uint32_t)img->width; w++) { tmp = XGetPixel(img, w, h); - tmp = ((tmp & img->red_mask) >> 16) | (tmp & img->green_mask) - | ((tmp & img->blue_mask) << 16) | (255 << 24); - if(fwrite(&tmp, sizeof(uint32_t), 1, stdout) != 1) + rgba[0] = htobe16((tmp & img->red_mask) >> 8); + rgba[1] = htobe16(tmp & img->green_mask); + rgba[2] = htobe16((tmp & img->blue_mask) << 8); + rgba[3] = htobe16(65535); + + if(fwrite(&rgba, 4*sizeof(uint16_t), 1, stdout) != 1) die("fwrite() failed"); } }