comparison 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
comparison
equal deleted inserted replaced
905:841982f31be3 906:69623c4cbf6c
1 /*
2 * LCDemu based on HECterm by the same author
3 * XImage conversion muck
4 */
5
6 #include <stdio.h>
7 #include <stdint.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <strings.h>
11 #include <X11/Xlib.h>
12 #include <X11/Xresource.h>
13 #include <X11/Xutil.h>
14 #include "globals.h"
15
16 XImage *
17 convert_image_depth24(input, npix)
18 uint16_t *input;
19 int npix;
20 {
21 uint32_t *imgbuf;
22 int i, in, r, g, b;
23 XImage *img;
24
25 imgbuf = malloc(npix * 4);
26 if (!imgbuf) {
27 perror("malloc");
28 exit(1);
29 }
30 for (i = 0; i < npix; i++) {
31 in = input[i];
32 r = (in & 0xF800) << 8;
33 g = (in & 0x07E0) << 5;
34 b = (in & 0x001F) << 3;
35 imgbuf[i] = r | g | b;
36 }
37 img = XCreateImage(mydisplay, CopyFromParent, display_depth, ZPixmap,
38 0, (char *) imgbuf, npix, 1, 32, 0);
39 if (!img) {
40 perror("XCreateImage");
41 exit(1);
42 }
43 return(img);
44 }
45
46 init_image_conversion()
47 {
48 display_depth = DefaultDepth(mydisplay, DefaultScreen(mydisplay));
49 switch (display_depth) {
50 case 24:
51 convert_function = convert_image_depth24;
52 break;
53 default:
54 fprintf(stderr,
55 "error: fc-ledemu has not been adapted for X11 depth != 24, yours is %d\n",
56 display_depth);
57 exit(1);
58 }
59 }