IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

cairo_win32_surface_create(bad BITSPIXEL)


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Par défaut cairo_win32_surface_create(bad BITSPIXEL)
    Bonjour à tous.

    J'ai téléchargé il n'y a pas longtemps GTK+ pour Windows. Après tout un problème de packages interdépendants, j'ai enfin pu compiler le source suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <gtk/gtk.h>
     
    int main(int argc, char **argv) {
      GtkWidget *window;
     
      gtk_init(&argc, &argv);
     
      window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_widget_show(window);
     
      gtk_main();
     
      return 0;
    }
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`
    Mais à l'exécution j'ai l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cairo_win32_surface_create(bad BITSPIXEL): Espace insuffisant pour traiter cette commande.
    Ce n'est vraissemblablement pas un problème de mémoire (j'ai tout quitté et redemarré pour en être sûr) et je ne vois pas d'où cela peut venir.

    Merci d'avance pour vos réponses.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    d'après ce que tu post, ça devrait fonctionner

    Tu as essayé de désinstaller et réinstaller GTK+ ?

    Normalement GTK+ n'est pas gourmand en mémoire (la version 1.0 est utilisée en embarqué) mais au cas ou, tu as vérifié que tu avais assez de mémoire ?

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Par défaut
    J'ai apparemment assez de mémoire, et j'ai aussi essayé de réinstaller GTK+. Sans succès. Je mets la démarche que j'ai suivi:

    - installation de GTK et de ses dépendances à partir www.gtk.org: packages atk, cairo, gtk+-2.0, pango.

    - modification des chemins indiqués dans les packages de /bin/pkgconfig.

    - compilation et installation de pkg-config-0.20 (j'ai du télécharger libintl si je me souviens bien).

    - installation de libpng et zlib à partir gnuwin32.sourceforge.net

    - compilation du source exemple.

    - exécution.

    Le tout sous Windows XP avec Mingw et MYSYS (pour la compilation). Si je me souviens bien, j'ai eu un petit problème à la compilation avec pkg-config car 'intl.dll' n'était pas présent et j'ai du renommer 'libintl3.dll' en 'intl.dll'.

    En espérant que ça pourra aider.

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Tu as essayé avec code:block : Installation de GTK+ sous Code::Blocks (il faut surement supprimer C:\Program Files\CodeBlocks\include\atk-1.0 dans les options du linker avec la dernière version deGTK+).

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Par défaut
    J'ai testé avec ta méthode (Code::Blocks) en utilisant les versions que j'avais (atk-1.9.0 cairo-1.0.4 glib-2.8.6 gtk+-2.8.9 pango-1.10.3) et celle que tu fournis (atk-1.9.0 cairo-1.0.2 glib-2.8.4 gtk+-2.8.7 pango-1.10.1). Toujours sans succès.

    Je me suis dit que le problème venait peut-être du runtime (conflit entre différentes versions, qui sait). Mais à part Java (tient c'est bizarre il n'y a aucune DLL associée à GTK pour Java, que des fichiers .class et .java), aucune version précédente de GTK n'est installée sur mon ordinateur. Je ne sais pas quelle est l'influence de Java, mais je pense qu'elle est tout simplement nulle.

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Par défaut
    Je viens de regarder un peu le code de cairo (je pense que l'erreur vient de là) et voilà ce que j'obtiens (enfin ça c'est le .diff):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    @@ -964,6 +966,8 @@ cairo_win32_surface_create (HDC hdc)
     {
         cairo_win32_surface_t *surface;
         RECT rect;
    +    int depth;
    +    cairo_format_t format;
     
         /* Try to figure out the drawing bounds for the Device context
          */
    @@ -973,7 +977,26 @@ cairo_win32_surface_create (HDC hdc)
     	_cairo_error (CAIRO_STATUS_NO_MEMORY);
     	return &_cairo_surface_nil;
         }
    -    
    +
    +    if (GetDeviceCaps(hdc, TECHNOLOGY) == DT_RASDISPLAY) {
    +	depth = GetDeviceCaps(hdc, BITSPIXEL);
    +	if (depth == 32)
    +	    format = CAIRO_FORMAT_ARGB32;
    +	else if (depth == 24)
    +	    format = CAIRO_FORMAT_RGB24;
    +	else if (depth == 8)
    +	    format = CAIRO_FORMAT_A8;
    +	else if (depth == 1)
    +	    format = CAIRO_FORMAT_A1;
    +	else {
    +	    _cairo_win32_print_gdi_error("cairo_win32_surface_create(bad BITSPIXEL)");
    +	    _cairo_error (CAIRO_STATUS_NO_MEMORY);
    +	    return &_cairo_surface_nil;
    +	}
    +    } else {
    +	format = CAIRO_FORMAT_RGB24;
    +    }
    Je ne sais absolument pas ce que fait GetDeviceCaps() donc je ne saurais dire l'erreur qui s'y cache. Mais apparement c'est un ajout récent: dans le même .diff, on peut lire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Win32: Set surface format based on device caps
     
        If the DC is a display DC, inspect its depth and set out local format
        appropriately.  If it's not a display DC, assume RGB24.
        (cherry picked from 6dd0a70d271f93df95f4bcaff5073b9bf90cecb6 commit)
    Si un programmeur Windows pasee par ici...

    De plus cette erreur m'a l'air peu courante: aucune référence dans google! (à part le diff qui date de février). Je ne sais vraiment plus quoi faire.

Discussions similaires

  1. [Débutant][JNDI] Erreur "bad class file"
    Par giffle dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2005, 10h23
  2. Problème d'installation (Bad EIP value)
    Par Bensor dans le forum Administration système
    Réponses: 7
    Dernier message: 14/11/2004, 10h53
  3. bad file magic number
    Par sam_XIII dans le forum C++
    Réponses: 1
    Dernier message: 23/10/2004, 23h20
  4. [Exception]bad magic number
    Par MicroPuce dans le forum Général Java
    Réponses: 2
    Dernier message: 11/10/2004, 14h16
  5. Bad magic number (impossible de booter)
    Par karmaki dans le forum Administration système
    Réponses: 16
    Dernier message: 04/08/2004, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo