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

OpenGL Discussion :

Screenshot facile readpixels


Sujet :

OpenGL

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut Screenshot facile readpixels
    Bonjour,
    voila, j'ai lu tout ce que j'ai pu trouver dans les forum de developpez.com au sujet des screenshot opengl, glreadpixels, glreadbuffer, etc... mais je n'ai pas reussi a trouver d'exemple de code simple pour faire un screenshot.

    Je travaille en C# avec le framework Tao

    Je vais faire de l'offscreen rendering par la suite, mais je doit utiliser les fonctions les plus compatibles possibles (donc pas de FBO ni de PBO car ces extensions ne sont pas supportés -> chipset graphique intégré sur portable powa), uniquement du readpixels dans le back buffer

    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
    int v_width = width;
    int v_height = height;
    byte[] v_contenu_image = new byte[4*v_width*v_height];
     
    //on redessine le monde
    monde.DrawYourself(this);
     
    //on récupère le contenu du buffer BACK (pour faire du rendu offscreen)
    Gl.glReadBuffer(Gl.GL_BACK);
    Gl.glReadPixels(0, 0, v_width, v_height, Gl.GL_RGBA, Gl.GL_UNSIGNED_BYTE, v_contenu_image);
     
    Bitmap v_image = new Bitmap(width, height);
    for(int i=v_height-1; i>=0; i--)//numéro de ligne
    {
    	for(int j=0; j<v_width; j++)//numéro de colonne
    	{
    		int v_taille_ligne = 4*v_width;
    		//l'ordre est determiné par le format de rapatriement (GL_RGBA)
    		int v_red	= v_contenu_image[(v_taille_ligne*i)+j];
    		int v_green = v_contenu_image[(v_taille_ligne*i)+j+1];
    		int v_blue	= v_contenu_image[(v_taille_ligne*i)+j+2];
    		int v_alpha	= v_contenu_image[(v_taille_ligne*i)+j+3];
    		v_image.SetPixel(j, i, Color.FromArgb(v_alpha, v_red, v_green, v_blue));
    	}
    }
     
    v_image.Save(chemin_fichier_image, System.Drawing.Imaging.ImageFormat.Bmp);
    L'initalisation de la fenetre se fait dans le monde.DrawYourself, mais ou j'ai un soucis, c'est que l'image lue ressemble à ça :



    Est ce qu'il y a quelque chose que je fait mal ?
    Faut-il que je spécifie explicitement mon mode de rendu à l'initialisation (RGBA) ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    j devrait être multiplié par 4 également.

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut
    Pardon pour ce post si simple -_-, j'étais tellement penché sur la config d'opengl que j'ai pas douté de ma boucle de remplissage.

    Encore merci pour la réponse ultra rapide Laurent.

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

Discussions similaires

  1. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  2. prise rapide de screenshot
    Par cemoi dans le forum DirectX
    Réponses: 12
    Dernier message: 24/11/2003, 14h12
  3. Question facile!!!!
    Par AL-{3D}- dans le forum DirectX
    Réponses: 2
    Dernier message: 13/10/2003, 23h37
  4. screenshot
    Par Heimdall dans le forum Windows
    Réponses: 9
    Dernier message: 08/08/2003, 11h33
  5. Screenshot
    Par rellik dans le forum Composants VCL
    Réponses: 8
    Dernier message: 05/08/2003, 12h28

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