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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 407
    Détails du profil
    Informations personnelles :
    Localisation : France

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