FreeCalypso > hg > freecalypso-tools
view lcdemu/ximage.c @ 90:8dc062c6359b
target-utils/libc: memcpy16 and memcpy32 optimized variants implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 28 Oct 2016 23:02:44 +0000 |
parents | e7502631a0f9 |
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); } }