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

Windows Discussion :

GDI - Travail sur les pixels dans un DIB


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 12
    Points
    12
    Par défaut GDI - Travail sur les pixels dans un DIB
    Salut à tous,

    je souhaite travailler sur les pixels d'une image stockée en DIB.

    biBitCount me donne le stockage en bits/pixel.

    getDIBits() me donne le pointeur sur les données...

    Comment avoir accès par exemple au pixel correspondant à la l ième ligne et c ième colonne ???

    Si quelqu'un connait la réponse qui ne doit pas être bien compliquée, mais me bloque depuis ce matin!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    utilises les informations directement dans la structure BITMAP que tu as quand tu fais un GetObject() : Le pointeur sur les bits (que tu as déjà), et surtout le membre bmWidthBytes (et bien sûr, n'oublie pas que le signe de biHeight détermine dans quel sens sont les lignes du bitmap...

    On va dire 3e pixel de la 5e ligne:
    Pour avoir la 5e ligne, c'est :
    char * pt_ligne = (char *)pt_bits + 4*bm.bmWidthBytes;

    Pour le 3e pixel, ben, ça dépend de la taille d'un pixel...

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    ok super Medinoc...

    Donc, pour le 3ème pixel, je m'en sors avec
    pt_pix = (char *)pt_ligne + (*dib_header).biBitCount * 3;

    c'est bien ça ???

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Pas exactement, puisque biBitCount, comme son nom l'indique, est indiqué en bits...
    Si biBitCount est supérieur ou égal à 8, tu peux utiliser ceci:

    pt_pix = (char *)pt_ligne + dib_header->biBitCount/8 * 2;

    N'oublie pas: on numérote à partir de zéro, donc le 3e signifie +2 (comme dans mon exemple où le cinquième signifie +4)

    Et si biBitCount est inférieur à 8 (bitmap monochrome ou 16couleurs, notamment) c'est plus dur...
    Mais à partir de 256 couleurs, mon exemple marche.

Discussions similaires

  1. Réponses: 12
    Dernier message: 06/12/2008, 14h38
  2. Opérations sur les textures dans pixels shader
    Par ultimanu dans le forum DirectX
    Réponses: 10
    Dernier message: 27/04/2007, 09h32
  3. [MFC][Visual C++ 6]Travail sur les dates
    Par tus01 dans le forum MFC
    Réponses: 6
    Dernier message: 31/01/2006, 21h32
  4. VBA Word - Aide sur les "Retours" dans tableaux
    Par wouebmaster dans le forum VBA Word
    Réponses: 5
    Dernier message: 29/12/2005, 10h08

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