SoloCodigo
		Programación General => C/C++ => Mensaje iniciado por: cermoret 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
			 
			
			- 
				¿Estas teniendo en cuenta de que las imagenes de 16 bits no tienen mapa de colores sino que hay que "desenpaquetar" el R, el G y el B?
			
 
			
			- 
				http://lesstif.sourceforge.net/doc/Xlib/spec/xlib.html (http://lesstif.sourceforge.net/doc/Xlib/spec/xlib.html) => seguro que aqui esta.
ftp://www.x.org/contrib/widgets/ (http://ftp://www.x.org/contrib/widgets/) => puedes suar algo de esto
 :hola: