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
    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 415
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 415
    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 415
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 415
    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 415
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 415
    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 415
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 415
    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