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

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