realbasic-nug.fr
[Top] [All Lists]

Re: Alternative à Graphics.DrawPicture

To: REALbasic NUG French <realbasic-nug.fr@lists.realsoftware.com>
Subject: Re: Alternative à Graphics.DrawPicture
From: Eric Pousse <eric@adx-online.com>
Date: Wed, 1 Apr 2009 08:34:33 +0200
Authentication-results: mx.google.com; spf=neutral (google.com: 74.124.194.228 is neither permitted nor denied by best guess record for domain of realbasic-nug.fr-bounces@lists.realsoftware.com) smtp.mail=realbasic-nug.fr-bounces@lists.realsoftware.com
Delivered-to: listarchive@realsoftware.com
In-reply-to: <BLU135-DS7855B6D4439E21E2EB2AEC88A0@phx.gbl>
References: <BLU135-DS4469E8D9AB39FCCFA28B9C88A0@phx.gbl> <D065A916-1D8A-45EF-BCB5-8BE09C93FFAF@adx-online.com> <BLU135-DS7855B6D4439E21E2EB2AEC88A0@phx.gbl>
Reply-to: REALbasic NUG French <realbasic-nug.fr@lists.realsoftware.com>
Sender: realbasic-nug.fr-bounces@lists.realsoftware.com
Bonjour,

Pourquoi utiliser un buffer si vous ne le conservez pas ?
Avez-vous essayé en dessinant directement dans le graphics du canvas ?
S'agissant de dessin d'images, je ne sais pas si useoldrenderer = true améliorerait le temps d'exécution ?
De même pour les pragma.

Désolé pas d'autre idée.

Eric POUSSE
RealCADD, 2D CAD software : <http://www.realcadd.com/>
iPocket BA : <http://www.adx-online.com/prog/ipocketba/ipocketba.html>

Le 31 mars 09 à 21:41, Jérémie Leroy a écrit :

Alors voici le code en simplifié.

Sub Redraw(g As graphics)
//g est le graphics du canvas

     Dim buffer as Picture = NewPicture(g.Width, g.Height, 32)
     Dim gg As Graphics = buffer.Graphics
     DrawBackground(gg)
gg.DrawPicture DispPicture, 0, 0, cWidth, cHeight, scrollDeltaX/ po, scrollDeltaY/po, DispPicture.Width, DispPicture.Height

     If DrawLayer then
buffer.Graphics.DrawPicture Layers, LayerPos.X1*po- scrollDeltaX, LayerPos.Y1*po-scrollDeltaY, LayerPos.Width*po, LayerPos.Height*po, _
       0, 0, LayerPos.Width, LayerPos.Height
     End If

     //Draw Selection
     DrawSelection(gg)

   //Draw to canvas
   g.DrawPicture buffer, 0, 0
End Sub


Sub DrawBackground(g As Graphics)

//Cette fonction redessine BackGroundBuffer (propriété privée du Canvas) si la taille du canvas a été modifié. //Ensuite, BackGroundBuffer est dessiné sur la variable "g" passée en paramètre de fonction

   g.DrawPicture(BackgroundBuffer, 0, 0)
End Sub

Sub DrawSelection(g As Graphics)

//Idem que DrawBackGroudn, SelectionPic est recréé uniquement si la sélection change de taille
   //Ensuite la sélection est dessinée sur la variable g


g.DrawPicture SelectionPic, me.Selection.RealX-scrollDeltaX, me.Selection.RealY-scrollDeltaY
End Sub

Je vois mal comment je pourrais optimiser ça en utilisant uniquement des fonctions internes de RB.

--
ESILV Engineering Student
REALBasic Developer
http://pagesperso-orange.fr/JeremK/


From: Eric Pousse
Sent: Tuesday, March 31, 2009 8:41 PM
To: REALbasic NUG French
Subject: Re: Alternative à Graphics.DrawPicture


Bonsoir,

Il est peut-être possible d'accélérer le code, montrez-le.

Ou bien autre solution, avoir une image d'arrière plan en ressource
d'une taille suffisante et l'afficher avant l'image zoomée.

Eric POUSSE
RealCADD, 2D CAD software : <http://www.realcadd.com/>
iPocket BA : <http://www.adx-online.com/prog/ipocketba/ipocketba.html>

Le 31 mars 09 à 20:22, Jérémie Leroy a écrit :


Bonjour,

Je travail sur une application graphique, ou plutôt un IDE qui a une
partie graphique comme REALbasic.
Sur l'affichage graphique, il y a une image qui peut être zoomée.

Lorsque le zoom est < 100 (l'image ne prend plus tout l'espace
graphique disponible), je dessine un arrière plan composé de carrés
gris et blanc (comme l'arrière plan de transparence dans Photoshop).
Le rafraichissement prend environ 50ms.
J'aimerai améliorer ceci et donc je cherche une alternative à
DrawPicture, en utilisant directement les appels disponibles dans
Windows pour dessiner une image sur un objet graphique.

Je connais BitBlt mais ceci ne fonctionne que sur Canvas.graphics
alors que j'ai besoin de dessiner sur une image qui sert de Buffer
d'abord.

Aussi si il y a une alternative plus rapide à Graphics.FillRect je
suis preneur.

Cordialement,

Jérémie Leroy
--
ESILV Engineering Student
REALBasic Developer
http://pagesperso-orange.fr/JeremK/





<Prev in Thread] Current Thread [Next in Thread>