annotate lcdemu/ximage.c @ 906:69623c4cbf6c

lcdemu: image conversion implemented for X11 depth 24
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 07 Sep 2015 10:18:39 +0000
parents
children 7a189b7bbd67
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
906
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
1 /*
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
2 * LCDemu based on HECterm by the same author
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
3 * XImage conversion muck
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
4 */
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
5
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
6 #include <stdio.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
7 #include <stdint.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
8 #include <stdlib.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
9 #include <string.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
10 #include <strings.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
11 #include <X11/Xlib.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
12 #include <X11/Xresource.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
13 #include <X11/Xutil.h>
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
14 #include "globals.h"
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
15
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
16 XImage *
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
17 convert_image_depth24(input, npix)
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
18 uint16_t *input;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
19 int npix;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
20 {
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
21 uint32_t *imgbuf;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
22 int i, in, r, g, b;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
23 XImage *img;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
24
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
25 imgbuf = malloc(npix * 4);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
26 if (!imgbuf) {
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
27 perror("malloc");
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
28 exit(1);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
29 }
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
30 for (i = 0; i < npix; i++) {
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
31 in = input[i];
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
32 r = (in & 0xF800) << 8;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
33 g = (in & 0x07E0) << 5;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
34 b = (in & 0x001F) << 3;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
35 imgbuf[i] = r | g | b;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
36 }
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
37 img = XCreateImage(mydisplay, CopyFromParent, display_depth, ZPixmap,
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
38 0, (char *) imgbuf, npix, 1, 32, 0);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
39 if (!img) {
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
40 perror("XCreateImage");
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
41 exit(1);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
42 }
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
43 return(img);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
44 }
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
45
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
46 init_image_conversion()
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
47 {
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
48 display_depth = DefaultDepth(mydisplay, DefaultScreen(mydisplay));
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
49 switch (display_depth) {
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
50 case 24:
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
51 convert_function = convert_image_depth24;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
52 break;
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
53 default:
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
54 fprintf(stderr,
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
55 "error: fc-ledemu has not been adapted for X11 depth != 24, yours is %d\n",
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
56 display_depth);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
57 exit(1);
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
58 }
69623c4cbf6c lcdemu: image conversion implemented for X11 depth 24
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
59 }