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

Delphi Discussion :

Opération sur les pointeurs


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut Opération sur les pointeurs
    Bonjour,

    Bien qu'ayant regardé la FAQ Delphi sur les pointeurs, je n'arrive pas à faire ce que je veux. En gros j'ai crée un buffer qui contient des éléments et je veux les parcourir. Voici les portions de code avec une instruction fausse mais qui montre ce que je veux faire :

    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
    type 
       TPixel = array[0..2] of Byte;
       PTPixel = ^TPixel;
       TPixelData = array of array of TPixel;
     
    var
       myPixel : TPixel;
       PixelData : TPixelData;
       buffer, bufferIt : Pointer;
     
       GetMem(buffer, Img.Width * Img.Height * SizeOf(TPixel));
       glReadPixels(0, 0, Img.Width - 1, Img.Height - 1, GL_RGB, GL_UNSIGNED_BYTE, buffer);
       bufferIt := buffer;
       for i := 0 to Img.Width - 1 do
       begin
          for j := 0 to Img.Height - 1 do
          begin
             pixelData[i][j] := (TPixel (bufferIt^));
             bufferIt := bufferIt + 1;  // Op non applicable à ce type d'opérande.
          end;
       end;

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Essaye donc Inc pour passer au pointeur suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Inc(bufferIt, SizeOf(TPixel));
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut
    J'ai l'erreur Type ordinal requis.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Inc fonctionne avec les PChar ou les pointeurs typés ... mais pas avec les pointeurs évidemment ...

    BufferIT c'est un pointeur mais sur quoi ?

    sinon reste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bufferIt := Pointer(Integer(bufferIt) + 1);
    d'après quelques survols avec google, tu ne pourrais pas simplement ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    type 
       TPixel = array[0..2] of Byte;
       PPixel = ^TPixel;
       TPixelData = array of array of TPixel;
       PPixelData = ^TPixelData;
     
    var
       myPixel : TPixel;
       PixelData : PPixelData;
     
       GetMem(PixelData, Img.Width * Img.Height * SizeOf(TPixel));
       glReadPixels(0, 0, Img.Width - 1, Img.Height - 1, GL_RGB, GL_UNSIGNED_BYTE, Pointer(PixelData));
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut
    Après l'exécution de l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glReadPixels(0, 0, Img.Width - 1, Img.Height - 1, GL_RGB, GL_UNSIGNED_BYTE, buffer);
    mon buffer va contenir des éléments (longueur * hauteur) TPixels (3 byte) qui représentent la surface de mon contexte opengl afin d'enregistrer cela dans une image.

    BufferIt c'était juste pour parcourir les éléments.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Oui, c'est ce que j'ai cru compendre ... je dirais que tu pourrais même faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    type 
       TPixel = array[0..2] of Byte;
       PPixel = ^TPixel;
       TPixelData = array of array of TPixel;
     
    var
       myPixel : TPixel;
       PixelData : TPixelData;
     
       SetLength(PixelData, Img.Width);
       for i:= 0 to Img.Width - 1 do SetLength(PixelData[i], Img.Heigth);
     
       glReadPixels(0, 0, Img.Width - 1, Img.Height - 1, GL_RGB, GL_UNSIGNED_BYTE, @PixelData[0][0]);
    le .h (version pascal et version c) pourrait aider ... je n'ai pas opengl
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  2. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 08/01/2005, 23h25
  3. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  4. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 17h50
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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