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++Builder Discussion :

image vers matrice


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de hassiba_45
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    127
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 127
    Par défaut image vers matrice
    bonjour à tous, j'ai deux qustions
    1- je cherche à rendre une matrice sous forme d'image, cette matrice est déclarée comme suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char ** image;
    2- j'ai la déclaration suivant en c++builder6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned char ** imag;
    imag=new unsigned char * [height];
    for (i=0;i<height;i++)
      imag[i]=new unsigned char * [width];
    ce que je cherche c'est que fait cette instruction?
    et merci.

  2. #2
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Citation Envoyé par hassiba_45 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned char ** imag;
    imag=new unsigned char * [height];
    for (i=0;i<height;i++)
      imag[i]=new unsigned char * [width];
    le premier new déclare la première dimension de ta matrice (la hauteur)
    ensuite pour chaque élément de cette première dimension (dans le for), il y a déclaration de la deuxième dimensions (la largeur)

  3. #3
    Membre confirmé Avatar de hassiba_45
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    127
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 127
    Par défaut matrice vers image
    salut tous le monde,j'ai réalisé un programme qui transforme une matrice en image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(x=0;x<h;x++)
      {
      for(y=0;y<w;y++)
      Image2->Canvas->Pixels[y][x]=imag[x][y];
      }
    en utilisant l'initialisation précédente mais les résultats ne sont pas correctes.
    est ce que vous pouvez m'aider à trouver l'erreur?
    et merci

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    L'erreur est que Pixels traite au niveau des couleurs (RGB) tandis que ta matrice sans doute pas !
    S'il s'agit d'une matrice à niveaux de gris, on serait dans ce contexte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c= Matrice[y][x];
    ...->Pixels[x][y] = (TColor)RGB(c,c,c);
    Remarque : si le bitmap est un 8 bits, il faut espérer que la palette soit un référentiel de gris sous peine de représenter n'importe quoi.
    Et dans ce cas, on aurait une code plus optimisé avec Scanline :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Graphics::TBitmap *Dest = Image1->Picture->Bitmap;
    for(int y = 0; j < Dest->Height; y++)
        {
        CopyMemory((Byte*)Dest->ScanLine[y], Matrice[y], Dest->Width);
        }
    Image1->Repaint();
    A plus !

  5. #5
    Membre confirmé Avatar de hassiba_45
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    127
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 127
    Par défaut matrice vers image
    salut, merci pour votre réponse, je désir avoir un affichage dans une autre matrice (pas dans Image1)
    et merci encore une fois

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Pourtant, c'est bien ce que tu fais (ou que tu tentes de faire):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image2->Canvas->Pixels[y][x]=imag[x][y];
    A plus !

  7. #7
    Membre confirmé Avatar de hassiba_45
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    127
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 127
    Par défaut déclaration de matrices
    salut, merci pour vos réponses.
    j'ai une autre question si cela ne vous dérange pas.
    est ce qu'il y a une différence entre cette déclaration
    et celle ci
    et a plus!

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    La différence apportée par le type se situe essentiellement au niveau de l'arithmétique des pointeurs (indexation, incrémentation, décrémentation).
    L'unité arithmétique du pointeur est toujours un objet du type qui lui a été défini.

    Pour le reste, ça ne change rien... un pointeur reste un pointeur quel que soit son type (ce vers quoi il pointe, c'est à dire l'adresse qu'il contient) !

    A plus !

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1.unsigned char ** imag;
    imag=new unsigned char * [height];
    2.for (i=0;i<height;i++)
      imag[i]=new unsigned char * [width];
    j'amerai comprendre c'est qoui cette expression(le 2.) j'ai pas compris son sens
    et es-ce que c'est deux délaration sont équivalente et laquel est meilleur et pourqoi?merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char ** imag;
    imag=new unsigned char * [height];
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char imag[200][200]
    ou 200 c'est le heignt merci

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut
    Citation Envoyé par l_seringa Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1.unsigned char ** imag;
    imag=new unsigned char * [height];
    2.for (i=0;i<height;i++)
      imag[i]=new unsigned char * [width];
    j'amerai comprendre c'est qoui cette expression(le 2.)
    j'ai pas compris son sens
    La boucle for permet de fixer la hauteurd de l'image, afin d'avoir un tableau a deux dimensions uniforme (largeur*hauteur)
    Citation Envoyé par l_seringa Voir le message
    et es-ce que c'est deux délaration sont équivalente et laquel est meilleur et pourqoi?merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char ** imag;
    imag=new unsigned char * [height];
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char imag[200][200]
    ou 200 c'est le heignt merci
    Dans le premier cas tu ne fixe la taille qu'une des deux dimension, et de façon dynamique.
    Dans le second, tu fixe a 200 la hauteur et la largeur, soit 200*200=40000 cases (200 est la largeur, mais quel est la hauteur?)

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1.unsigned char ** imag;
    imag=new unsigned char * [height];
    2.for (i=0;i<height;i++)
      imag[i]=new unsigned char * [width];j'amerai comprendre c'est qoui cette expression(le 2.)
    j'ai pas compris son sens 
     
    La boucle for permet de fixer la hauteurd de l'image, afin d'avoir un tableau a deux dimensions uniforme (largeur*hauteur)
    merci pour votre reponse mais pourqoui on doit le faire dans une boucle.c la necessité de la boucle dont j'ai pas compris et merci

  12. #12
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut
    Il faut le faire dans une boucle, car chaque ligne doit avoir sa déclaration du nombre de colonne.

    une boucle aussi pour que chaque ligne a le meme nombre de colonne que les autres, car si on fait une a une, on peux faire varier ce nombre d'initialisation.

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Il faut le faire dans une boucle, car chaque ligne doit avoir sa déclaration du nombre de colonne.
     
    une boucle aussi pour que chaque ligne a le meme nombre de colonne que les autres, car si on fait une a une, on peux faire varier ce nombre d'initialisation
    merci c'est bien expliqué.

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Dans le code qui est proposé dans la discussion, le tableau complet (celui qui ferait height * width, tel qu'on aimerait le penser) est obtenu par segmentation, c'est à dire par petits blocs distincts qui ne sont pas forcément contigus en mémoire, mais à ce stade cela n'a aucune importance.
    Dans la boucle, on crée height fois blocs de taille width et dont les adresses (celle des blocs) sont stockées dans le tableau de pointeurs (imag).
    Ce tableau de pointeurs ( Byte **imag = new Byte*[height] ) est en fait un tableau d'adresses, chacune d'elle étant l'adresse du premier octet du segment (ce que l’on va considérer comme une ligne).

    L'adresse de la donnée n'y sera pas calculée comme cela se ferait avec un tab[height][width] statique !
    En arrière plan, le compilateur met en place un mécanisme qui d'une manière très schématique peut se détailler comme suit :

    - Il récupère l’adresse du segment :
    ligne = imag[y]
    - Puis accède à la donnée :
    ligne[x]

    Ce qui reste totalement invisible si on écrit imag[y][x] !

    A plus !

Discussions similaires

  1. Télécharger image vers poste client
    Par Thomad dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2006, 10h34
  2. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39
  3. [Debutant] [JSP/Servlet] Upload d'image vers le serveur
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 05/07/2005, 17h42
  4. Découpage d'une grande image vers des textures
    Par djar dans le forum OpenGL
    Réponses: 14
    Dernier message: 26/02/2005, 18h46

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