[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]

Probleme pour afficher des bitmaps sous x



Bonjour, j'ai des probleme pour afficher un bitmap loader en memoire
dans un buffer (24 bit)
Mon moniteur est en 24 bits.  J'ai toujours une image (tout a fait
illisible..) deux couleur, jamais les millions que contient mon bitmap.
Je roule sur Redhat 7 en 1024x768x24.

Qu'est-ce qui cloche dans mon code? ca fait 5 heures que je passe sur ca
et il est temps que ca ce regle!
Merci pour tout aide a l'avance

Julie


#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <stdio.h>                      /* std input-output */
#include <iostream.h>
#include "ZPbmpLoader.h"

int main (int argc, char **argv)
{
   Display               *myDisplay;             /* pointeur sur le
display */
   int                   myScreen;               /* ecran que l'on
utilise */
   int                   myDepth;                /* plan de couleur
depth */
   XSetWindowAttributes  myWindowAttributes;     /* structure de window
attibutes */
   unsigned long         myWindowMask;           /* masque pour window
attributes */
   Window                myWindow;               /* structure window*/
   XSizeHints            theSizeHints;           /* window hints pour le
window manager */
   int                   x       = 200;          /* x coin en haut a
gauche de la fenetre */
   int                   y       = 150;          /* y coin en haut a
gauche de la fenetre */
   unsigned int          width   = 300;          /* largeur de la
fenetre */
   unsigned int          height  = 200;          /* hauteur de la
fenetre */
   int                   border_width = 0;      /* epaisseur de bordure
de la fenetre */

   myDisplay = XOpenDisplay ("");
   if (myDisplay == NULL)
   {
      fprintf (stderr, "ERREUR: connexion X impossible sur ce display
%s\n",
      XDisplayName (NULL));
      return 0;
   }

   myScreen = DefaultScreen (myDisplay);
   myDepth = DefaultDepth (myDisplay, myScreen);

   myWindowAttributes.border_pixel = BlackPixel (myDisplay, myScreen);
   myWindowAttributes.background_pixel = WhitePixel (myDisplay,
myScreen);
   myWindowAttributes.override_redirect = True;

   myWindowMask = CWBackPixel | CWBorderPixel | CWOverrideRedirect;

   myWindow = XCreateWindow (myDisplay,
                                        RootWindow (myDisplay,
myScreen),
                                        x, y, width, height,
border_width,
                                        myDepth, InputOutput,
CopyFromParent,
                                        myWindowMask,
&myWindowAttributes);

   theSizeHints.flags = PPosition | PSize;  /* choix du masque pour les
hints */
   theSizeHints.x = x;         /* position x */
   theSizeHints.y = y;         /* position y */
   theSizeHints.width = width; /* largeur de la fenetre */
   theSizeHints.height = height;     /* hauteur de la fenetre */
   XSetNormalHints(myDisplay, myWindow, &theSizeHints);
   XMapWindow (myDisplay, myWindow);

//
// Test graphic
//
   Drawable  drawable = myWindow; /* par exemple, window id  */
   XGCValues xgcvalues;
   unsigned long  valuemask;
   GC        gc;

   valuemask = 0L;     /* pas d'options présicées  */
   gc = XCreateGC (myDisplay, drawable, valuemask, &xgcvalues );



   unsigned long  f_colour;
   unsigned long  b_colour;

   f_colour = BlackPixel(myDisplay, myScreen);
   b_colour = WhitePixel(myDisplay, myScreen);

   XSetForeground ( myDisplay, gc, f_colour );
   XSetBackground ( myDisplay, gc, b_colour );



   ZPbmpFile bmpFile;
   bmpFile.load("bmp2.bmp");

   Pixmap pixmap2=0;
   // all reference to bmp are good.  The buffer bmpFile.getImage()
   // contain rgb24 data, I check it so it's not there the problem...
   // My display is in 24 bit depth (checked)
   pixmap2 = XCreatePixmapFromBitmapData(myDisplay, drawable,
                                          (char*)bmpFile.getImage(),
                                          bmpFile.getWidth(),
                                          bmpFile.getHeight(),
                                          f_colour, b_colour, 24);
   XCopyArea(myDisplay,pixmap2,myWindow,gc,0,0,400,400,0,0);

   XFlush(myDisplay);

   sleep(2);

   XFreePixmap(myDisplay,pixmap2);
   XDestroyWindow (myDisplay, myWindow);
   XCloseDisplay (myDisplay);

   return 0;


}