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

SDL Discussion :

Parcourir une image sauf ses bords


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 30
    Points
    30
    Par défaut Parcourir une image sauf ses bords
    Bonjour,

    Je souhaite parcourir une image en évitant les pixels se trouvant sur les bords de l'image. Pour tester mon code, je mets en noir les pixels parcourus. Le problème c'est qu'au lieu de colorier en noir le centre de l'image et d'avoir un carré de couleur autour, les pixels évités forme un sorte de Z : la première ligne et la dernière sont correctement évitées, mais il y a un problème pour le bord gauche et droit qui forment une diagonale.

    J'ai affiché pos, pour une image 5x5, elle prend bien successivement toutes les valeurs de 0 à 75 en évitant 0 à 17, 27 à 32... Est-ce que ça viendrait de la manière dont SDL stocke les pixels d'une image ?

    Un petit coup de main serait grandement apprécié, je me prends la tête la-dessus depuis quelques heures...

    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
    SDL_Surface *resultat;
    SDL_LockSurface(resultat);
    Uint8 *pixels_result = (Uint8 *)resultat->pixels;
     
    for(int channel = 0; channel < 3; channel++)
    {
        for(int i = 1; i < resultat->h - 1; i++) 
        {
            for(int j = 1; j < resultat->w - 1; j++) 
            {
                pos = (((i * resultat->w) + j) * 3) + channel;
                *(pixels_result + pos) = 0;
            }
        }
    }

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Alors en fait, ça marche correctement (évite les bords), mais pas pour toutes les images ?! Si je télécharge une image depuis internet, pas de problème, mais si je la modifie et l'enregistre sous gimp, j'ai de nouveau des problèmes pour les bords gauches et droits. Ca fait la même chose, peut importe le format de l'image (testé en bmp, jpg et png).

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut


    On va dire que le code fourni n'est qu'un exemple incomplet (parce que vive la SDL_Surface* sinon).

    Pour ce qui est des couleur, la SDL fourni a part, dans la doc, des fonction GetPixel et putpixel.

    Ca te permettra d'avoir les rgb des couleurs, car la maniere dont ils sont stocké depende d'autre facteur (je pense notablement au picth).

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Pourquoi incomplet ? Il manque effectivement un SDL_UnlockSurface(resultat); à la fin, mais c'est tout ce qu'il y a dans mon code. A moins que j'ai loupé qqchose ?

    Sinon j'ai effectivement récupérer le code de la fonction putpixel et je l'ai légèrement modifiée pour que cela corresponde à ce que je veux faire. Ca marche.

    En gros, si j'ai bien compris, SDL ne stocke pas les pixels ligne par ligne, mais peut faire des lignes plus longues que la largeur d'une image ? Enfin je sais pas si je suis claire... Le pitch ça représente la longueur d'une ligne ? J'ai trouvé très peu d'infos sur la manière dont SDL stocke les pixels d'une image. si t'as des liens ou une petite explication, ça m'intéresse.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Votre boucle est quelque peu spéciale, du moins, je ne comprends pas pourquoi la plus grande boucle ( celle qui englobe tout ) c'est celle des channels.
    Habituellement une image c'est ceci:

    [R1][G1][B1][A1][R2][G2][B2][A2]
    [R3][G3][B3][A3][R4][G4][B4][A4]

    Donc pour moi, la boucle des channels doit être la plus petite.

    Définition du pitch: Le pitch c'est le délage nécessaire pour passer d'une ligne à une autre. Plus précisément c'est la longueur d'une ligne. Soit widht * bpp.
    Si je veux accéder au premier pixel de la ligne 32, je vais faire simplement:
    pitch * 32;

    Maintenant, pour votre histoire de z qui s'affiche, c'est surement parce que vous manquez un pixel ( ou que vous en avez un deux trop ). Du coup, pour chaque ligne, cela se décale plus.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Parcourir une image 3D avec un cube
    Par adriangarello dans le forum Images
    Réponses: 5
    Dernier message: 16/05/2008, 14h41
  2. Parcourir une Image.
    Par dxdiag dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 25/03/2008, 23h23
  3. Parcourir une image pour récupérer le min et le max
    Par Premium dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 14/11/2006, 22h17
  4. [CSS] Espace résiduel entre une image et le bord du div sous IE
    Par Celeri dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 28/07/2006, 21h10
  5. [ImageMagick] Parcourir une image pixel par pixel
    Par kip dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/10/2005, 14h10

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