FreeCalypso > hg > freecalypso-ui-dev
view lcdemu/ximage.c @ 5:45c81216d964
fc-lcdpoll: works after minor fix
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 14 Mar 2018 23:48:21 +0000 |
parents | e7f1035f10d4 |
children |
line wrap: on
line source
/* * LCDemu based on HECterm by the same author * XImage conversion muck */ #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <X11/Xlib.h> #include <X11/Xresource.h> #include <X11/Xutil.h> #include "globals.h" XImage * convert_image_depth24(input, npix) uint16_t *input; int npix; { uint32_t *imgbuf; int i, in, r, g, b; XImage *img; imgbuf = malloc(npix * 4); if (!imgbuf) { perror("malloc"); exit(1); } for (i = 0; i < npix; i++) { in = input[i]; r = (in & 0xF800) << 8; g = (in & 0x07E0) << 5; b = (in & 0x001F) << 3; imgbuf[i] = r | g | b; } img = XCreateImage(mydisplay, CopyFromParent, display_depth, ZPixmap, 0, (char *) imgbuf, npix, 1, 32, 0); if (!img) { perror("XCreateImage"); exit(1); } return(img); } init_image_conversion() { display_depth = DefaultDepth(mydisplay, DefaultScreen(mydisplay)); switch (display_depth) { case 24: convert_function = convert_image_depth24; break; default: fprintf(stderr, "error: fc-lcdemu has not been adapted for X11 depth != 24, yours is %d\n", display_depth); exit(1); } }