1 --- fbgrab-1.0/fbgrab.c 2002-04-15 22:22:54.000000000 +0200
2 +++ fbgrab-1.0/fbgrab.c.new 2006-07-14 02:46:49.000000000 +0200
5 for (i=0; i < (unsigned int) height*width*2; i+=2)
8 - outbuffer[(i<<1)+0] = (inbuffer[i] & 0x1f) << 3;
10 - outbuffer[(i<<1)+1] = (((inbuffer[i+1] & 0x7) << 3) |
11 - (inbuffer[i] & 0xE0) >> 5) << 2;
13 - outbuffer[(i<<1)+2] = (inbuffer[i+1] & 0xF8);
15 - outbuffer[(i<<1)+3] = '\0';
17 +#ifdef __BIG_ENDIAN__
18 + (inbuffer[i] << 8) + inbuffer[i+1];
20 + (inbuffer[i+1] << 8) + inbuffer[i];
23 + outbuffer[(i<<1)+0] = (v << 3) & 0xf8; /* B */
24 + outbuffer[(i<<1)+1] = (v >> 3) & 0xfc; /* G */
25 + outbuffer[(i<<1)+2] = (v >> 8) & 0xf8; /* R */
26 + outbuffer[(i<<1)+3] = 0; /* A */
34 +static void convertARGBtoBGRA(int width, int height,
35 + unsigned char *inbuffer,
36 + unsigned char *outbuffer)
40 + for (i=0; i < (unsigned int) height*width*4; i+=4)
42 + outbuffer[i+0] = inbuffer[i+3];
43 + outbuffer[i+1] = inbuffer[i+2];
44 + outbuffer[i+2] = inbuffer[i+1];
45 + outbuffer[i+3] = inbuffer[i+0];
50 static void write_PNG(unsigned char *outbuffer, char *filename,
51 int width, int height, int interlace)
54 write_PNG(outbuffer, filename, width, height, interlace);
57 +#ifdef __BIG_ENDIAN__
58 + convertARGBtoBGRA(width, height, inbuffer, outbuffer);
59 + write_PNG(outbuffer, filename, width, height, interlace);
61 /* No conversion needed */
62 write_PNG(inbuffer, filename, width, height, interlace);
66 fprintf(stderr, "%d bits per pixel are not supported! ", bits);