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 :

TImage traitement de pixels


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut TImage traitement de pixels
    Bonjour,

    Je suis de retour avec mes projets tous différents l'uns que les autres...
    Cette fois j'aurais le projet de faire un mini crypter et décrypter d'image.

    Je vais expliquer en bref ce que j'aimerais exactement faire, déjà pour le côté du décrypteur, mais comme d'habitude j'y arrive pas...
    J'ai une image que je charge dans un TImage ou TBitmap. Ensuite j'aimerais prendre 1 pixel sur 2 et 1 ligne sur 2 :

    OXOXOXOXOX
    XXXXXXXXXX
    OXOXOXOXOX
    XXXXXXXXXX
    OXOXOXOXOX

    Ici mon image est "cryptée" selon mon protocole. Les pixels X (pixel noir) sont à ignorés mais tous les pixels O sont à mettre dans un nouveau TImage. J'ai essayer de faire une boucle for avec 1 pixel / 2 (pour commencer) qui prend la couleur mais cela échouais l'image était toute blanche...

    Pour ce qui est du crypteur je me débrouillerais avec le code du décrypteur qui se ressemble...

    Merci de m'aguiller svp.

  2. #2
    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 !

    Est-ce que ça ne correspond pas à une réduction de 50% ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graphics::TBitmap *Srce;
    Graphics::TBitmap *Dest;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dest->Width = Srce->Width / 2;
    Dest->Height = Srce->Height / 2;
    Dest->Canvas->StretchDraw(Rect(0,0,Dest->Width, Dest->Height), Srce);
    A plus !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Oui c'est juste pour la taille du moins, mais ce n'est pas tout.

    Il faudrait prendre 1 pixel sur 2 et 1 ligne sur 2 de Srce et le mettre dans Dest. Donc pour vous faire comprendre un peu mieux je vais vous montrer avec 2 images. Donc le programme devra traité l'image 1 et donné l'image 2.

    donnerais

    ici il faut considéré 1 carré comme 1 pixel, (sinon ce serait trop petit)

    Donc tous les pixels en bleu sont à supprimé non pas à cause de leur couleur mais à cause de 1 pixel sur 2 et de 1 ligne sur 2...

    Si vous ne comprenez pas je vous expliquerais, Merci de m'aider svp

  4. #4
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Par défaut Plus de détails...
    Si je comprend bien le probleme, tu veux introduire une image dans une autre.
    Posons ton probleme :
    Soit deux images : i1 et i2 en clair, ii l'image cryptée.

    pour simplifier les explications nous remplacerons les couleurs par des caracteres :
    l'image i1 contiendra les "couleurs" : a,b,c,d.
    l'image i2 contiendra les "couleurs" : 1,2,3,4.

    D'apres ton dessin :
    si ii est de la forme :
    a 1 b 2 c 3 d
    b a d c d c d
    a 3 d 2 c 1 a

    i2 sera :
    1 2 3
    3 2 1

    et i1?...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Salut rconty,

    Désolé j'ai édité après, j'avais mal formulé ma phrase :

    Donc pour vous faire comprendre un peu mieux je vais vous montrer avec 2 images. Donc le programme devra traité l'image 1 en prendre les pixels voulus puis donner l'image 2.
    Il n'y a que ii et i1. i1. Au début est donc vide, blanc.
    Le programme prend l'image ii et en retire les pixels voulu et en fais i1.

    J'avais commencé un bout de code, peut-être que vous comprendrais mieux :

    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
    22
    23
    24
    25
    26
    27
    28
      // Décryptage
      Graphics::TBitmap *bmp = new Graphics::TBitmap;
      bmp->Width = VisuImage->Width/2;
      bmp->Height = VisuImage->Height/2;
      bmp->PixelFormat = VisuImage->Picture->Bitmap->PixelFormat;
      int numcols,numrows;
     
      for (int i=0; i < VisuImage->Picture->Bitmap->Height; i+=2) // par ligne
      {
       numrows=0;
       BYTE * row = (BYTE*)VisuImage->Picture->Bitmap->ScanLine[i];
     
       for (int j=0; j < VisuImage->Picture->Bitmap->Width; j+=2) // par colonne
        {
         BYTE * col = (BYTE*)(row + j * 3);
     
         // comment faire pour affecter bmp avec ça :
         .... = col[0];
         .... = col[1];
         .... = col[2];
     
         numrows++; //Compte le nombre de ligne affectée à bmp
        }
       numcols++; //Compte le nombre de colonne affectée à bmp
      }
     
     VisuImage->Picture->Bitmap->Assign(bmp); // nouvelle image
     delete bmp;
    VisuImage est un TImage (ii)
    bmp est un Graphics::Bitmap (i1)

  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 !

    Justement, l'idée ici de prendre chaque pixel pair de chaque ligne paire
    est réalisé directement par le StretchDraw à 50 % (un point sur deux et une ligne
    sur deux) !

    Sinon, au niveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graphics::TBitmap *Srce = new Graphics::TBitmap;
    Graphics::TBitmap *Dest = new Graphics::TBitmap;
    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
    Dest->Width  = Srce->Width / 2;
    Dest->Height = Srce->Height / 2;
    Dest->PixelFormat = Srce->PixelFormat;
    Byte *S;
    Byte *D;
    if(Srce->PixelFormat == pf24bit)
        {
        for(int y = 0; y <  Dest->Height; Y++)
            {
            S = (Byte*)Srce->ScanLine[y * 2];
            D = (Byte*)Dest->ScanLine[y];
            for(int x = 0; x < Dest->Width; x++)
                {
                //1 pixel prend 3 octets à cause des composantes RGB dans un pf24bit
                *D = *S; D++; S++;
                *D = *S; D++; S++;
                *D = *S; D++; //pas la peine de faire S++ puisque...
                S = S + 4; //déplace S d'un point (1 + 3 octets)
                }
            }
        }
    A plus !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Merci beaucoup henderson pour ton aide !

    Maintenant il me reste à faire le crypteur, je vais m'inspirer de ton code henderson, je vous tient au courant, encore merci !

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

Discussions similaires

  1. Traitement d'images par pixels
    Par raphchar dans le forum C++
    Réponses: 4
    Dernier message: 20/06/2010, 10h07
  2. Traitement d'image (sortir les pixel) - Marche
    Par StormXI dans le forum Débuter
    Réponses: 7
    Dernier message: 30/10/2008, 17h35
  3. Réponses: 4
    Dernier message: 07/04/2008, 10h48
  4. TColor d'un pixel dans un TImage (contenant bmp ou jpeg)
    Par Tenguryu dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/09/2006, 13h58
  5. [TImage] Transfert de Picture par pixels.
    Par H2D dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2003, 14h37

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