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 :

Bleu transparent sur une image.


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut Bleu transparent sur une image.
    Bonjour a tous,
    Dans mon application j'ai plusieur images (TImage) qui sont visibles et je voudrais que quand je click sur l'une d'elle, celle-ci apparaisse comme selectionné.
    Je pensé la faire apparaitre en bleu transparent comme quand on sélectionne un dossier sous windows.
    Je ne sais pas si il y a un systéme de filtre de couleur que l'on peut appliquer sur un TImage.
    Merci pour les infos.
    A+.

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, je ne sais pas ce qui arriverais si avec un ScanLine tu lisais tout les pixels du TImage pour ajouter une certaine valeur au bleu de RGB?

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Je propose une solution, je ne sais pas si elle va te convenir :

    Dans le .h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
            TImage *Image1;
            TImage *Image2;
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall Image1Click(TObject *Sender);
            void __fastcall FormClick(TObject *Sender);
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
            __fastcall TForm1(TComponent* Owner);
            TImage* ImageSelectionnee;
    };
    Dans le .cpp :

    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
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      ImageSelectionnee=NULL;
      Image1->Canvas->Brush->Color=clWhite;
      Image2->Canvas->Brush->Color=clWhite;
      Image1->Canvas->FillRect(Image1->ClientRect);
      Image2->Canvas->FillRect(Image2->ClientRect);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image1Click(TObject *Sender)
    {
      if(ImageSelectionnee!=NULL)
      ImageSelectionnee->Canvas->DrawFocusRect(ImageSelectionnee->ClientRect);
     
      ImageSelectionnee=(TImage*)Sender;
      ImageSelectionnee->Canvas->DrawFocusRect(ImageSelectionnee->ClientRect);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
      if(ImageSelectionnee!=NULL)
      {
        ImageSelectionnee->Canvas->DrawFocusRect(ImageSelectionnee->ClientRect);
        ImageSelectionnee=NULL;
      }
    }
    Alors, je t'explique un peu ce que ça fait :

    Lorsque l'on sélectionne un TImage, je dessine une bordure de sélection autour de celle ci avec DrawFocusRect...
    Ensuite, grâce à l'inspecteur d'objet, j'affecte pour chaque OnClick de TImage celui du TImage1 (ça évite de faire du code mais après ça dépend de ton besoin...)

    Ensuite, on libère l'image sélectionnée lorsque l'on clic sur la form

    Voilà, j'espère que ça va répondre partiellement à ta demande

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut
    Merci a tous les 2,
    J'essais ces 2 solutions dans la journée.
    A+.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut
    ero-sennin, je viens de tester ta solution.
    Ca fonctionne bien excepté que la sélection se voit pas beaucoup: les pointillés noir qui entour l'image sélectionnée sont trés fin...

    Pour la solution de Crayon, j'ai pas été capable de me servir de scanline ... Et comme je suis sous vista, j'ai pas accés a l'aide de builder 6...
    Est ce que tu aurais un exemple simple de l'utilisation de scanline?

    Merci à tous les 2.
    A+.

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Je suis pas certain que c'est vraiment la bonne méthode, mais tu peux essayer:
    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
    void TForm1::MoreBlue(Graphics::TBitmap *ImAModifier)
    {
        COLORREF couleur;
        Byte R, G, B;
        int x, y;
     
        for(y=0; y<ImAModifier->Height; y++)
        for(x=0; x<ImAModifier->Width; x++)
        {
            couleur = ImAModifier->Canvas->Pixels[x][y];
            R = GetRValue(couleur);
            G = GetGValue(couleur);
            B = 255;//GetBValue(couleur);
     
            ImAModifier->Canvas->Pixels[x][y] =  (TColor)RGB(R, G, B);
        }
    }

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Par défaut
    Merci Crayon pour l'idée,
    Ca fonctionne, sauf que c'est un peu lent du fait de la modification pixel par pixel...
    Et l'autre probléme c'est que c'est pas réversible...
    Merci quand même pour l'exemple.
    A+.

  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 !

    Pour le fun, voici un autre moyen :

    Je dispose de deux panels supplémentaires avec aucun bevel d'activé (flat) de couleur noir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TPanel *OmbreDroite;
    TPanel *OmbreBas;
    J'ai donc mis 4 Images pour les quelles j'ai developpé la OnMouseDown suivante :

    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
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    TImage *Image = (TImage*)Sender;
    OmbreDroite->Visible = false;
    //OmbreDroite->Parent = Image->Parent; //au cas où... selon que...
    OmbreBas->Visible = false; 
    //OmbreBas->Parent = Image->Parent; //au cas où... selon que...
    OmbreDroite->SetBounds( Image->Left + Image->Width,
                            Image->Top + 5,
                            5,
                            Image->Height);
     
    OmbreBas->SetBounds(    Image->Left + 5,
                            Image->Top + Image->Height,
                            Image->Width,
                            5);
     
    OmbreDroite->Visible = true;
    OmbreBas->Visible = true;
    }
    Une façon comme une autre... !

    A plus !

Discussions similaires

  1. [JpGraph] Transparence sur une image
    Par Gwen_59 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/04/2011, 14h07
  2. [LabVIEW 8.2] Transparence sur une image 2D
    Par aur127 dans le forum LabVIEW
    Réponses: 0
    Dernier message: 12/11/2008, 11h26
  3. [Images] Transparence sur une image
    Par Shandler dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 06/11/2008, 12h10
  4. Ecrire un texte transparent sur une image.
    Par insane_80 dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/02/2008, 13h10
  5. dégradé transparent sur une image
    Par Dionyzos dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/04/2005, 15h47

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