1
« en: Lunes 9 de Octubre de 2006, 18:18 »
Hola a todos:
Tengo un problema con una aplicación de un telescopio y espero que alguien pueda ayudarme.
El problema es el siguiente, el telescopio adquiere imágenes del cielo a una profundidad máxima de 16 bits y tales imágenes deben ser mostradas en un computador mientras se reciben (en tiempo real) para chequear parámetros. Cuando yo despliego mi imágen en la pantalla a una profundidad de 8 bits la imágen se muestra correctamente, PERO cuando intento desplegar la imágen a 16 bits la aplicación divide la pantalla en dos partes iguales y los colores de la imágen también los altera.
algunas de las funciones que estoy usando para mostrar la imagen son:
lastline = XCreateImage(display, visual, depth, ZPixmap, 0, (BYTE*)brow, width, 1, depth, 0);
XCopyArea(display, pixmap, win, gc, 0, 0, width, height-1, xbd1, ybd1);
XPutImage(display, win, gc, lastline, 0, 0, xbd1, ybd1+height-1, width, 1);
y la función para cargar el mapa de colores (debe ser a escala de grises) es:
void colmap(int ncolors, int slope, int intercept, XColor colors[])
{
int is, ie, k, i0, i;
static int nhere = 0;
static u_short rgb[3][256];
if (nhere == 0) {
nhere = 1;
for (i=0; i<256; i++) {
rgb[0] = (unsigned short) i*257;
rgb[1] = (unsigned short) i*257;
rgb[2] = (unsigned short) i*257;
}
}
for (i = 0; i < 256; i++)
colors.flags = DoRed | DoBlue | DoGreen;
is = intercept; if ( is < 0 ) is = 0; if (is > ncolors) is = ncolors;
ie = is + slope - 1; if ( ie < 0 ) ie = 0; if (ie > ncolors) ie = ncolors;
i0 = 255 - ncolors;
for (i=0; i<is; i++ ) {
colors[i+i0].red = rgb[0][0];
colors[i+i0].green = rgb[1][0];
colors[i+i0].blue = rgb[2][0];
}
for (i=is; i<ie; i++) {
k = (i-intercept)*256/slope;
if( k > 254 ) k = 254; if ( k < 0 ) k = 0;
colors[i+i0].red = rgb[0][k];
colors[i+i0].green = rgb[1][k];
colors[i+i0].blue = rgb[2][k];
}
for (i=ie; i<ncolors; i++) {
colors[i+i0].red = rgb[0][254];
colors[i+i0].green = rgb[1][254];
colors[i+i0].blue = rgb[2][254];
}
for (i=0; i<ncolors; i++)
XAllocColor(display, defcmap, colors + i + i0);
}
¿Tienen alguna idea del problema?
Muchas gracias, Carmen Rodríguez