SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: cermoret en Lunes 9 de Octubre de 2006, 18:18

Título: Problema Con Xlib
Publicado 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
Título: Re: Problema Con Xlib
Publicado por: Eternal Idol en Lunes 9 de Octubre de 2006, 18:47
¿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?
Título: Re: Problema Con Xlib
Publicado por: su - en Lunes 9 de Octubre de 2006, 21:42
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: