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

Langage Delphi Discussion :

Problème d'allocation de tableau dynamique


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut Problème d'allocation de tableau dynamique
    Bonjour,

    Je rencontre un problème pour allouer un tableau dynamique correspondant au tableau de pixels que me renvoie une image.

    J'ai une caméra de résolution 768*576 qui prend une image. Je veux la transférer dans un tableau de pixels linéaire (array of byte, et pas array of array of byte) mais au lieu d'avoir 768*576 = 442 368 valeurs dans le tableau j'en ai que 131 071 lorsque je regarde avec le debugger pas à pas. Même chose avec une caméra 640*480.

    La différence c'est que lorsque j'affiche ces tableaux de pixels dans un composant image, la caméra 640*480 est correctement affichée alors que la caméra 768*576 n'est pas affichée entièrement et l'image ne correspond pas à ce que la caméra acquiert.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Tab: array of byte;
    ...
    SetLength(Tab, Lignes * Colonnes); // Tableau de 131 071 valeurs au lieu de 442 368 ou 307 200
    Est-ce que c'est un problème lié au debugger qui ne peut afficher que 131 071 valeurs alors que le tableau a vraiment la bonne longueur, ou c'est qu'il est impossible d'allouer + de 131 071 valeurs ?

    Je vous remercie pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Pense aussi qu'une image peut être en 8bits, 16 ou 24 !
    Fait un ShowMessage(Length(Tab));, cela sera plus fiable que le Débogueur !
    Sinon, 131 071 + 1 = 128 * 1024, oh ! Quel hasard !
    Tu fois pouvoir allouer au moins 1960Mo dans un projet vide en D7, la possibilité se réduit au fur et à mesure que tu alloues d'autres objets mais tu es loin de la limité théorique de 2GO

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut
    Merci pour ton astuce du ShowMessage ;-)

    Par contre je n'ai pas compris le reste de ton explication...

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 871
    Points : 11 361
    Points
    11 361
    Billets dans le blog
    6
    Par défaut
    Je veux la transférer dans un tableau de pixels linéaire
    avant, dans quoi est-elle ? ne peux-tu utiliser un "cast" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var 
      Tab1: packed array[1..5, 1..5] of Byte;
      Tab2: packed array[1..25] of Byte absolute Tab1; // pointe sur les mêmes éléments que Tab2

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut
    C'est bon mon problème est résolu ! Je n'arrivais pas à afficher l'autre image car je n'utilisais pas la bonne résolution ailleurs dans mon programme.

    Avant de transférer dans le tableau de pixels, l'image vient de la caméra.

    Tout fonctionne comme je le souhaite c'était une étourderie de ma part en fait. Problème résolu et merci pour l'astuce de ShowMessage !

    @+

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

Discussions similaires

  1. [Débutant][Win32] Problème d'allocation de tableau de FILE
    Par Patchanka dans le forum Visual C++
    Réponses: 8
    Dernier message: 06/04/2009, 10h49
  2. [xsl-fo]Problème Mise en page tableau dynamique
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/05/2007, 14h01
  3. Réponses: 7
    Dernier message: 24/11/2006, 09h56
  4. Problème de libération de tableau dynamique
    Par Rustine dans le forum Delphi
    Réponses: 5
    Dernier message: 18/09/2006, 14h58
  5. Problème de libération de tableau dynamique
    Par cali1983 dans le forum C++
    Réponses: 4
    Dernier message: 14/03/2006, 08h30

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