• Miércoles 15 de Mayo de 2024, 05:57

Autor Tema:  Problema Con Xlib  (Leído 1504 veces)

cermoret

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema Con Xlib
« en: Lunes 9 de Octubre de 2006, 18:18 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Xlib
« Respuesta #1 en: Lunes 9 de Octubre de 2006, 18:47 »
0
¿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?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Problema Con Xlib
« Respuesta #2 en: Lunes 9 de Octubre de 2006, 21:42 »
0
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.