FreeCalypso > hg > freecalypso-sw
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 } |