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 :

creer un bitmap par une selection de souris


Sujet :

C++Builder

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut creer un bitmap par une selection de souris
    salut ;
    s'il vous plait aideez moi � implementer un code qui genere ue image apartir d'une autre en selectionnant une region avec la souris de cette derniere .

    l'id�e que j'ai maintenant est de sauvegarder la position du OnMouseDown puis MouseUP puis faire un parcours entre c'est deux region , je ne sais pas si c'est la meilleurs id�e ou non.

    merci

  2. #2
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    la meilleur solution pour connaitre le cadre trac� est effectivement cette methode, ensuite il faut que tu regarde des propri�t� et des m�thodes du canvas si ton image est situ� dans un TImage comme je le pense.

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

    On va supposer qu'il existe une image (Image1) sur la form.
    La convention pour les actions depuis la souris, ici, est la suivante :
    - Click droit sur une image d�clenche la s�lection
    - Click gauche sur une image d�clenche son d�placement
    Lorsqu'une nouvelle image est cr��e, celle-ci appara�t en retrait de 8 pixels par rapport � la s�lection.

    Quelques globales :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    TRect SelRect;
    bool SelFlag = false;
    bool MoveFlag = false;
    TImage *SrceImage = NULL;
    Un m�thode suppl�mentaire pour la class de TForm1 (� d�clarer dans la classe)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void _fastcall TForm1::DrawSelRect()
    {
    SrceImage->Canvas->Rectangle(SelRect.Left, SelRect.Top,SelRect.Right,SelRect.Bottom);
    }
    Les m�thodes de l'image qui seront �galement affect�es aux images cr��es :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    SrceImage = (TImage*)Sender;
    SelRect = Rect(X,Y,X,Y);
    if(Button == mbRight)
        {
        SelFlag = true;
        SrceImage->Canvas->Pen->Color = clBlack;
        SrceImage->Canvas->Pen->Style = psDot;
        SrceImage->Canvas->Pen->Mode = pmNot;
        SrceImage->Canvas->Brush->Style = bsClear;
        }
    else
        {
        MoveFlag = true;
        }
    }
     
    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    if(MoveFlag)
        {
        SrceImage->SetBounds(SrceImage->Left + X - SelRect.Left,
                             SrceImage->Top + Y - SelRect.Top,
                             SrceImage->Width,
                             SrceImage->Height);
        }
    if(SelFlag)
        {
        DrawSelRect();
        SelRect.Right = X;
        SelRect.Bottom = Y;
        DrawSelRect();
        }
    }
     
    void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
    MoveFlag = false;
    if(SelFlag)
        {
        SelFlag = false;
        DrawSelRect();
        if((SelRect.Left != SelRect.Right) && (SelRect.Top != SelRect.Bottom))
            {
            TImage *Image = new TImage(this);
            Image->Parent = this;
            //Réorganiser les bounds de la sélection, au cas où...
            if(SelRect.Left > SelRect.Right)
                {
                int w = SelRect.Left; SelRect.Left = SelRect.Right; SelRect.Right = w;
                }
            if(SelRect.Top > SelRect.Bottom)
                {
                int w = SelRect.Top; SelRect.Top = SelRect.Bottom; SelRect.Bottom = w;
                }
     
            TRect Dest = Rect(0,0,SelRect.Right - SelRect.Left, SelRect.Bottom - SelRect.Top);
            Image->Picture->Bitmap->Width = Dest.Right;
            Image->Picture->Bitmap->Height = Dest.Bottom;
            Image->Picture->Bitmap->Canvas->CopyRect(Dest, SrceImage->Canvas, SelRect);
            Image->OnMouseDown = Image1MouseDown;
            Image->OnMouseMove = Image1MouseMove;
            Image->OnMouseUp = Image1MouseUp;
            Image->AutoSize = true;
            Image->Left = SrceImage->Left + SelRect.Left + 8; //en retrait de 8 pixels
            Image->Top = SrceImage->Top + SelRect.Top + 8; //idem
            Image->BringToFront();
            }
        }
    }
    Tout ceci peut s'am�liorer ...en particulier v�rifier si le cadre de s�lection est bien dans son ensemble dans la zone de l'image...je te laisse faire !

    Ce n'est qu'un exemple...

    A plus !

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par d�faut R�solu
    merci anderson

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 13/10/2010, 16h20
  2. R�ponses: 4
    Dernier message: 16/07/2010, 17h06
  3. ajouter une nouvelle colonne par un SELECT
    Par maysa dans le forum Langage SQL
    R�ponses: 4
    Dernier message: 30/09/2006, 13h14
  4. SELECT / Remplacer le "." par une ","
    Par cluis dans le forum Requ�tes
    R�ponses: 2
    Dernier message: 27/09/2006, 15h31
  5. Creer des user par code dans une base de donnees Interbase
    Par dachir dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 16/07/2006, 14h55

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