add farbeld support, kudos to z3bra! - xscreenshot - screen capture tool
 (HTM) git clone git://git.codemadness.org/xscreenshot
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 8a6fbfbed1428dc71588d6a1b86730e0da055163
 (DIR) parent cb8ad238bc437ee427cddac7507d90d89dc7051c
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Mon, 16 Nov 2015 17:50:12 +0100
       
       add farbeld support, kudos to z3bra!
       
       Diffstat:
         M README                              |       8 ++++----
         M xscreenshot.c                       |      13 +++++++++----
       
       2 files changed, 13 insertions(+), 8 deletions(-)
       ---
 (DIR) 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
 (DIR) 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");
                        }
                }