• Viernes 8 de Noviembre de 2024, 21:37

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - cermoret

Páginas: [1]
1
C/C++ / Problema Con Xlib
« 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

Páginas: [1]