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

Composants VCL Delphi Discussion :

Probleme de raffraichissement


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Probleme de raffraichissement
    Salut,
    J'essaye de creer un logiciel de retouche photo et j'ai un probleme pour rafraichir la fenetre ou je visualise/edite les images.
    J'utilise une paintbox sur laquelle j'utilise canvas.draw pour dessiner une imagetemporaire qui contient les modifications.J'utilise un timer pour effectuer cette opération tous les 100 èmes.Ca me permet de gérer le Scroll si une image dépasse de l'écran.Le probleme est que si je dessine avec onmousemove et lineto il y a un super scintillement.Ne pourrais je pas utiliser une autre méthode pour rafraichir.J'ai pensé à l'evenement onpaint de la form ou de la paintbox mais je n'ai pas eu de résultats concluants.J'ai essayé de comprendre le code d'Estampe trouvé sur Efjelab.com mais sans succès.
    Merci d'avance.
    Gimlithedwarf.

  2. #2
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Peut être faudrait-il rafraichir ton image temporaire uniquement lorsque c'est nécessaire. J'imagine qu'à un moment ou un autre tu peux détecter quand l'utilisateur à fini une action (sans doute dans un OnMouseUp pour la fin de tracé d'une ligne par exemple).

    Une technique permettant d'optimiser le graphisme consiste à dessiner dans une bitmap en mémoire et d'afficher l'image (entière ou juste le rectangle nécessaire) d'un coup en utilisant la fonction BitBlt. De plus, on peut éviter les effets de scintillement en réactualisant l'affichage au bon moment en regardant l'état du spot de l'écran... mais je ne sais plus très bien comment faire. J'imagine que quelqu'un d'autre sur ce forum le sait 8)

    Quand aux algorithmes de traitement d'image, je ne suis pas compétent en cette matière
    Windows XP - Delphi 7
    Nous ne controlons une chose que si nous sommes capables de la détruire à tout moment. [Frank Herbert - Dune]

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2002
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Solution à 2 centimes, tu fais
    TonControle.DoubleBuffered := true;

    C'est une solution de fortune, mais si c'est pas important, ca suffira
    Coordinateur Technique de la JVCL
    http://jvcl.sourceforge.net

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 8
    Points : 5
    Points
    5
    Par défaut merci
    Et l'évenement onpaint, est ce qu'il ne serait pas exploitable?

    Le onmouseup ca marche pour les lignes et les formes mais pour d'autres fonctions c'est problématiques mais c'est pas mal quand même.
    J'ai vu aussi qu'il existait pour la paintbox les routines repaint et refresh mais la aussi pas de résultat concluant.Moi pas comprendre car le nom assez explicite me promettait de grandes choses.
    Si quelq'un a des merci de me le faire savoir.
    salut
    gimlithedwarf courageux nain dont les aventures en dvd viennent juste de sortir.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 8
    Points : 5
    Points
    5
    Par défaut merci
    Et l'évenement onpaint, est ce qu'il ne serait pas exploitable?

    Le onmouseup ca marche pour les lignes et les formes mais pour d'autres fonctions c'est problématiques mais c'est pas mal quand même.
    J'ai vu aussi qu'il existait pour la paintbox les routines repaint et refresh mais la aussi pas de résultat concluant.Moi pas comprendre car le nom assez explicite me promettait de grandes choses.
    Si quelq'un a des merci de me le faire savoir.
    salut
    gimlithedwarf courageux nain dont les aventures en dvd viennent juste de sortir.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour gimlithedwarf,

    voici comment j'ai procédé pour afficher/modifier/raffraîchir une image.
    Ça ne fait que dessiner selon la position du curseur de la souris, mais le
    scroll s'effectue correctement et il n'y a pas de scintillement apparent.
    Au cas où ça pourrait t'être utile, j'ai joint ci-dessous quelques lignes de code.

    J'avais déposé un ScrollBox (AutoScroll=True; AutoSize=False) sur ma Form,
    puis un PaintBox (Align=alNone; Left=0; Top=0) dans le ScrollBox

    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
    //------------------------------------------------------------------------------
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        MouseIsDrawing := False;
        ThePicture := TBitmap.Create;
    end;
     
    //------------------------------------------------------------------------------
    procedure TForm1.btnLoadPictureClick(Sender: TObject);
    begin
        if OpenDialog1.Execute then
        begin
            ThePicture.LoadFromFile(OpenDialog1.Filename);
            PaintBox1.Width := ThePicture.Width;
            PaintBox1.Height := ThePicture.Height;
            PaintBox1.Canvas.Refresh;
        end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        MouseIsDrawing := True;
        DrawingCursorPos := Point(x,y);
    end;
     
    //------------------------------------------------------------------------------
    procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
    begin
        if (ssLeft in Shift) and MouseIsDrawing then
        begin
            PaintBox1.Canvas.MoveTo(DrawingCursorPos.x, DrawingCursorPos.y);
            PaintBox1.Canvas.LineTo(x,y);
            // La modification de l'image se fait en parallèle
            ThePicture.Canvas.MoveTo(DrawingCursorPos.x, DrawingCursorPos.y);
            ThePicture.Canvas.LineTo(x,y);
            DrawingCursorPos := Point(x,y);
        end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
        PaintBox1.Canvas.Draw(0, 0, ThePicture);
        // ou utiliser CopyRect pour optimiser le tout
    end;
    Bonne chance

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/03/2007, 11h02
  2. [CR8.5][C#.NET] Probleme de raffraichissement du rapport
    Par Sidi-Bou dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 27/02/2007, 14h18
  3. Probleme de raffraichissement
    Par yannick1717 dans le forum Graphisme
    Réponses: 3
    Dernier message: 30/08/2006, 23h08
  4. [JList]Probleme de raffraichissement
    Par Dnasty dans le forum Composants
    Réponses: 8
    Dernier message: 06/07/2006, 19h49
  5. la balise iframe et le probleme de raffraichissement
    Par abdou.sahraoui dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 27/12/2005, 10h54

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