[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
- To:
- Subject: Probleme pour afficher des bitmaps sous x
- From: Julie <>
- Date: Wed, 4 Apr 2001 01:39:15 -0400 (EDT)
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;
}