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+ Discussion :

[gtkmm] de la bonne utilisation des pixbuf


Sujet :

GTK+

  1. #1
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut [gtkmm] de la bonne utilisation des pixbuf
    bonjour,

    je voudrais que quelqu'un vérifie le code suivant :

    je veux charger dans un tableau 1D une image png (avec alpha) :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    unsigned char *GLScene::chargementTexture(string fichier)
    {
    	guint8 *pix;
    	gint largeur=0,hauteur=0,nbChannel=0;
    	Glib::RefPtr<Gdk::Pixbuf> pixbuf;
    	unsigned char *iconDefault=NULL;
     
    	if (!utile::fichierExiste(fichier))
    		return iconDefault;
     
    	pixbuf=Gdk::Pixbuf::create_from_file(fichier,TAILLE_ICON,TAILLE_ICON,true);
     
    	hauteur=pixbuf->get_height();
    	largeur=pixbuf->get_width();
    	nbChannel=pixbuf->get_n_channels();
     
    	if (!(largeur==TAILLE_ICON && hauteur==TAILLE_ICON))
    		return iconDefault;
     
    	try
    	{
    		iconDefault=new unsigned char[TAILLE_ICON*TAILLE_ICON*nbChannel];
    		for(int i=0;i<TAILLE_ICON;i++)
    		{
    			for(int j=0;j<TAILLE_ICON;j++)
    			{
    				pix=pixbuf->get_pixels()+i*nbChannel+j*pixbuf->get_rowstride();
    				iconDefault[(j+i*TAILLE_ICON)*nbChannel] = (unsigned char)pix[0];
    				iconDefault[(j+i*TAILLE_ICON)*nbChannel+1]=(unsigned char)pix[1];
    				iconDefault[(j+i*TAILLE_ICON)*nbChannel+2]=(unsigned char)pix[2];
    				if (nbChannel>3)
    					iconDefault[(j+i*TAILLE_ICON)*nbChannel+3]=255-(unsigned char)pix[3];
    			}
    		}
    	}
    	catch( const std::bad_alloc &)
    	{
    		delete [] iconDefault;
    	}
     
    	return iconDefault;
    }
    Je demande cela parce que je ne suis pas sûr de ma façon de gérer l'alpha.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Je ne comprends pas plusieurs choses:
    • Pourquoi fais-tu 255-pix[3]?
    • Pourquoi ne pas créer directement un pixbuf avec un canal alpha? Lors du chargement de ton image tu regardes s'il existe. Dans le cas contraire tu l'ajoutes.
    • Enfin, pourquoi veux-tu faire cette manip? La structure GdkPixbuf te met à disposition directement ce tableau!
    Autrement ton code me semble correcte.

  3. #3
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    je fais cette manip pour créer une texture openGL.

    Je fais 255-pix[] parce que si je garde l'alpha par défaut, l'opengl marche mal (est inversé)

    Enfin le pixbuf créé a l'alpha, c'est celui que je récupère avec pix[3], non ?

    edit : j'ai résolu mes problème d'OpenGL et j'ai pu vérifier que tout marcher (sans inverser e canal alpha )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bonne utilisation des models
    Par Kaimite dans le forum Zend Framework
    Réponses: 4
    Dernier message: 04/07/2008, 15h43
  2. bonne utilisation des alias
    Par gok6tm dans le forum Requêtes
    Réponses: 0
    Dernier message: 15/11/2007, 11h48
  3. Avis sur la bonne utilisation des Threads
    Par Pitivier dans le forum Général Java
    Réponses: 8
    Dernier message: 28/11/2006, 20h07
  4. [C#] La bonne utilisation des WinForms (ouverture-Fermeture)
    Par Harry dans le forum Windows Forms
    Réponses: 28
    Dernier message: 03/08/2005, 11h39

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