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

C Discussion :

Dessiner des pixels


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut Dessiner des pixels
    Bonsoir,

    Dans mon programme en C, j'ai une matrice d'entier. Chaque case a pour valeur soit 0 (pour blanc), 1 (pour noir) ou 2 (pour rouge). Ce que j'aimerais faire, c'est dessiner cette matrice dans une fenêtre pour en avoir une représentation graphique où chaques cases representerait un pixel. Le problème, c'est qu'il y a pas mal de librairie graphique. J'ai essayé GTK+, mais je n'arrive absolument pas à faire ce que je veux : je trouve très peu d'informations sur internet. :/

    Si quelqu'un aurait une idée de comment faire, j'en serai ravi

    Merci.

  2. #2
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Bonsoir.

    Tu peux utiliser SDL et la méthode put_pixel() sur la SDL_Surface de la fenêtre.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut
    J'ai reussi à créer une fenetre. Par contre la fonction put_pixel(), est -elle definit ?
    J'ai trouvé sur la doc de la SDL qu'il y avait une fonction putpixel(), mais en essayant de l'utiliser, la aussi on me dit qu'aucune fonction putpixel() existe. :/
    En attendant, j'ai copier/coller le code de putpixel() d'ici : http://sdl.beuc.net/sdl.wiki/Pixel_Access.

    Mais si elle existe vraiment putpixel(), faut-il rajouter un #include ou quelque chose d'autre ?

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Tu peux directement intervenir sur la matrice de pixels d'un SDL_Surface. N'oublie pas d'encapsuler tes accès au sein d'un couple SDL_LockSurface / SDL_UnlockSurface.

    Attention, tu sembles te référer à la documentation de la SDL 1.2. Tu utilises probablement (ou tu devrais) la version 2 de l'API : SDL_Surface.

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Citation Envoyé par Syarko Voir le message
    J'ai reussi à créer une fenetre. Par contre la fonction put_pixel(), est -elle definit ?
    J'ai trouvé sur la doc de la SDL qu'il y avait une fonction putpixel(), mais en essayant de l'utiliser, la aussi on me dit qu'aucune fonction putpixel() existe. :/
    En attendant, j'ai copier/coller le code de putpixel() d'ici : http://sdl.beuc.net/sdl.wiki/Pixel_Access.

    Mais si elle existe vraiment putpixel(), faut-il rajouter un #include ou quelque chose d'autre ?
    Pardon je ne me rappelais plus que c'était pas natif

    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
    // La struct pixel
    typedef struct {
        Uint8 r;
        Uint8 g;
        Uint8 b;
        Uint8 a;
    } pixel;
     
    // l'assignation
    pixel pixel;
    pixel.r = (Uint8)0xff;
    pixel.g = (Uint8)0xff;
    pixel.b = (Uint8)0xff;
    pixel.a = (Uint8)128;
     
    // la fonction :)
    void put_pixel(SDL_Surface* surf, int x,int y,pixel* p)
    {
        Uint32* p_screen = (Uint32*)surf->pixels;
        p_screen += y*surf->w+x;
        *p_screen = SDL_MapRGBA(surf->format,p->r,p->g,p->b,p->a);  
    }
    il faut bloquer la surface avant d'utiliser cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SDL_LockSurface(surf);
    put_pixel(...);
    SDL_UnlockSurface(surf);

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut
    Voilà mon code :

    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
    void drawWindow(){
    	SDL_Init( SDL_INIT_EVERYTHING);
     
    	SDL_Surface *ecran = SDL_SetVideoMode(512,128,32, SDL_HWSURFACE);
    	pixel pixel;
    	for(int i = 0; i < 512; ++i){
    		for(int j = 0; j < 128; ++j){
     
     
    			pixel.r = (Uint8)0xff;
    			pixel.g = (Uint8)0xff;
    			pixel.b = (Uint8)0xff;
    			pixel.a = (Uint8)128;
     
    			SDL_LockSurface(ecran);
    			put_pixel(ecran, i, j, &pixel);
    			SDL_UnlockSurface(ecran);
    		}
    	}
     
    	pause();
     
    	SDL_Quit();
    }
    Théoriquement, je devrais obtenir une fenêtre toute blanche. Sauf que, des fois, soit la fenêtre est blanche comme prévu, soit elle reste noire. Et je ne comprends vraiment pas pourquoi. :/
    Pour info, j'ai repris la fonction put_pixel() donnait plus haut dans ce post.
    Ce problème subsiste egalement avec la fonction putpixel() trouvé ici : http://sdl.beuc.net/sdl.wiki/Pixel_Access

  7. #7
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Tu n'update peut-être pas la Window à chaque frame ?
    C'est jamais évident de prendre en main une lib qu'on ne connaît pas
    Voici un code simpliste qui fait ce que tu veux:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <SDL.h>
     
    SDL_Window *mWindow;
    SDL_Surface *mMainSurface;
     
    const int Win_W = 1024   ;
    const int Win_H = 768;
     
    typedef struct {
        Uint8 r;
        Uint8 g;
        Uint8 b;
        Uint8 a;
    } pixel;
     
    void put_pixel(SDL_Surface* surf, int x,int y,pixel* p)
    {
        Uint32* p_screen = (Uint32*)surf->pixels;
        p_screen += y*surf->w+x;
        *p_screen = SDL_MapRGBA(surf->format,p->r,p->g,p->b,p->a);  
    }
     
    int main( int argc, char* args[] )
    {
        pixel mpixel;
        mpixel.r = (Uint8)0xff;
        mpixel.g = (Uint8)0xff;
        mpixel.b = (Uint8)0xff;
        mpixel.a = (Uint8)128;
     
        if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
        {
            return -1;
        }
        else
        {
            mWindow = SDL_CreateWindow( "test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, Win_W, Win_H, SDL_WINDOW_SHOWN );
            if( mWindow == NULL )
            {
                return -2;
            }
            else
            {
                mMainSurface = SDL_GetWindowSurface( mWindow );
     
                while (1)
                {
                    SDL_LockSurface(mMainSurface);
     
                    for(int ix = 0; ix < Win_W; ix++)
                        for(int iy = 0; iy < Win_H; iy++)
                            put_pixel(mMainSurface, ix, iy, &mpixel);
     
                    SDL_UnlockSurface(mMainSurface);
     
                    SDL_UpdateWindowSurface( mWindow );
                }
            }
        }
     
        return 0;
    }

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

Discussions similaires

  1. Afficher des pixels pour dessiner une fonction
    Par Sandro Munda dans le forum Linux
    Réponses: 7
    Dernier message: 13/05/2007, 11h58
  2. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  3. [Dessin]dessiner des graphes
    Par mial dans le forum 2D
    Réponses: 4
    Dernier message: 27/04/2004, 19h51
  4. dessiner des graphiques
    Par mial dans le forum 2D
    Réponses: 6
    Dernier message: 26/04/2004, 12h22
  5. Réponses: 2
    Dernier message: 30/05/2002, 10h19

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