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:
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");
}
}