OVH Cloud OVH Cloud

Image en mouvement scintillante

13 réponses
Avatar
Sergio
Bonsoir,
j'ai mis une image Gif (mais le pb est le m=EAme avec une=20
image Bmp ou Jpeg) dans la propri=E9t=E9 Picture d'un=20
contr=F4le Image qui est en mouvement sur l'=E9cran gr=E2ce =E0=20
un contr=F4le Timer tous les 100 ms.=20
Or cette image lorsqu'elle est en mouvement, donne la=20
d=E9sagr=E9able impression de clignoter ou plut=F4t de=20
s'afficher avec un temps de retard par rapport au=20
Timer ... et bien s=FBr je veux garder un interval de 100=20
ms. Ce n'est pas trop g=E9nant pour le d=E9roulement du=20
programme ... mais =E7a fait pas propre !!
Quelqu'un aurait-il une solution pour =E9viter cela ?
Merci d'avance.
@ +

10 réponses

1 2
Avatar
le_troll
Bonjour, à tout hasard, n'est-ce pas à 18/s que le cinéma tourne, et toi tu
tourne à 10/s, c'est peut être aussi pour ça que ça clignote, as-tu essayé
quand même à 20/s???
--
Merci, @+, bye, Joe
montmartre75 AROBASE iFrance POINT com
------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Sergio" a écrit dans le message de
news: 117d701c441cd$97a76e50$
Bonsoir,
j'ai mis une image Gif (mais le pb est le même avec une
image Bmp ou Jpeg) dans la propriété Picture d'un
contrôle Image qui est en mouvement sur l'écran grâce à
un contrôle Timer tous les 100 ms.
Or cette image lorsqu'elle est en mouvement, donne la
désagréable impression de clignoter ou plutôt de
s'afficher avec un temps de retard par rapport au
Timer ... et bien sûr je veux garder un interval de 100
ms. Ce n'est pas trop génant pour le déroulement du
programme ... mais ça fait pas propre !!
Quelqu'un aurait-il une solution pour éviter cela ?
Merci d'avance.
@ +
Avatar
François Picalausa
Hello,

Tu devrais essayer d'utiliser un picturebox masqué (ou un DC) et de tracer
dessus via cls/paintpicture.
Ensuite, il faudrait recopier l'image du picturebox masqué (backbuffer) vers
un picturebox visible ou la form (front buffer), ce qui évite ce genre de
désagréments.

La technique est montrée dans ce post:
http://groups.google.com/groups?selm=Oi87kK1vDHA.2540%40TK2MSFTNGP10.phx.gbl

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Sergio" a écrit dans le message
de news:117d701c441cd$97a76e50$
Bonsoir,
j'ai mis une image Gif (mais le pb est le même avec une
image Bmp ou Jpeg) dans la propriété Picture d'un
contrôle Image qui est en mouvement sur l'écran grâce à
un contrôle Timer tous les 100 ms.
Or cette image lorsqu'elle est en mouvement, donne la
désagréable impression de clignoter ou plutôt de
s'afficher avec un temps de retard par rapport au
Timer ... et bien sûr je veux garder un interval de 100
ms. Ce n'est pas trop génant pour le déroulement du
programme ... mais ça fait pas propre !!
Quelqu'un aurait-il une solution pour éviter cela ?
Merci d'avance.
@ +


Avatar
Sergio
Re-bonjour,

merci pour la technique avec deux picturebox dont un
caché et avec la méthode Paintpicture : tout marche au
poil ... sauf que la transparence que j'avais avec
l'image GIF, disparait lors du passage à la méthode
PaintPicture. Comment faire pour garder cette
transparence ?
Merci beaucoup pour vos avis éclairés.
@+


-----Message d'origine-----
Hello,

Tu devrais essayer d'utiliser un picturebox masqué (ou


un DC) et de tracer
dessus via cls/paintpicture.
Ensuite, il faudrait recopier l'image du picturebox


masqué (backbuffer) vers
un picturebox visible ou la form (front buffer), ce qui


évite ce genre de
désagréments.

La technique est montrée dans ce post:
http://groups.google.com/groups?selm=Oi87kK1vDHA.2540%


40TK2MSFTNGP10.phx.gbl

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net



Avatar
Sundowne
Sergio wrote:
Re-bonjour,

merci pour la technique avec deux picturebox dont un
caché et avec la méthode Paintpicture : tout marche au
poil ... sauf que la transparence que j'avais avec
l'image GIF, disparait lors du passage à la méthode
PaintPicture. Comment faire pour garder cette
transparence ?
Merci beaucoup pour vos avis éclairés.
@+



'Jour
Plutôt que picture.paintpicture pour faire la copie entre le buffer et
l'écran , utilise l'api
Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc As Long, ByVal
x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long,
ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal
nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As
Boolean

pour avoir une couleur transparente .

Voir un exemple chez Allapi.

@+
Avatar
François Picalausa
Hello,

Sous Win 9x, le transparent blit a un memory leak...
Tu peux aller voir sur
http://www.mvps.org/EDais/
Libraries


pour
Chroma-blit
qui permet la même chose sans fuite de mémoire

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Sundowne" a écrit dans le message de
news:%
Sergio wrote:
Re-bonjour,

merci pour la technique avec deux picturebox dont un
caché et avec la méthode Paintpicture : tout marche au
poil ... sauf que la transparence que j'avais avec
l'image GIF, disparait lors du passage à la méthode
PaintPicture. Comment faire pour garder cette
transparence ?
Merci beaucoup pour vos avis éclairés.
@+



'Jour
Plutôt que picture.paintpicture pour faire la copie entre le buffer et
l'écran , utilise l'api
Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc As Long,
ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight
As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As
Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal
crTransparent As Long) As Boolean

pour avoir une couleur transparente .

Voir un exemple chez Allapi.

@+


Avatar
ng
Salut,

Oui cf PaintPicture, BitBlt, StrechtBlt, TransparentBlt (attention memory
leak sous win9x, tu doit pouvoir trouver des équivalent sur google groups).

Mais surtout, n'oublie pas de mettre en AutoRedraw=True, sinon tu
retrouveras certains effets désagréables de scintillement...

Sinon tu peux utiliser un UserControl (avec gestion de masque pour la
transparence...), cela fonctionne très bien, tout dépend de ce que tu veux
faire...

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



François Picalausa a écrit :

Hello,

Tu devrais essayer d'utiliser un picturebox masqué (ou un DC) et de
tracer dessus via cls/paintpicture.
Ensuite, il faudrait recopier l'image du picturebox masqué
(backbuffer) vers un picturebox visible ou la form (front buffer), ce
qui évite ce genre de désagréments.

La technique est montrée dans ce post:



http://groups.google.com/groups?selm=Oi87kK1vDHA.2540%40TK2MSFTNGP10.phx.gbl


"Sergio" a écrit dans le message
de news:117d701c441cd$97a76e50$
Bonsoir,
j'ai mis une image Gif (mais le pb est le même avec une
image Bmp ou Jpeg) dans la propriété Picture d'un
contrôle Image qui est en mouvement sur l'écran grâce à
un contrôle Timer tous les 100 ms.
Or cette image lorsqu'elle est en mouvement, donne la
désagréable impression de clignoter ou plutôt de
s'afficher avec un temps de retard par rapport au
Timer ... et bien sûr je veux garder un interval de 100
ms. Ce n'est pas trop génant pour le déroulement du
programme ... mais ça fait pas propre !!
Quelqu'un aurait-il une solution pour éviter cela ?
Merci d'avance.
@ +




Avatar
François Picalausa
Hello,

Mais surtout, n'oublie pas de mettre en AutoRedraw=True, sinon tu
retrouveras certains effets désagréables de scintillement...



Je n'ai pas ce genre d'effets sans autoredraw=true.
Simplement, quand une form passe au dessus d'un autre, le contenu est effacé

Sinon tu peux utiliser un UserControl (avec gestion de masque pour la
transparence...)



Propriétés MaskPicture, MaskColor, et BackStyle...
Mais avec cette technique par contre, j'ai du scintillement...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ng" a écrit dans le message de
news:
Avatar
Sergio
Salut,

je travaille sous Xp. Avec le transparent blit, le fond
blanc de mon image présente dans le pictureBox devient de
la couleur système "Sommet du bouton". Il ne devient pas
transparent au sens où un autre pictureBox passant
derrière ce premier pictureBox peut rester visible, et
non pas caché par le rectangle du pictureBox en premier
plan.
Donc je suis revenu à la méthode paintpicture : je n'ai
plus le scintillement, mais je n'ai plus hélas la
transparence.
Je vais essayer le chroma-blit. On verra ?!
Merci encore à tous.
Salutations.
-----Message d'origine-----
Hello,

Sous Win 9x, le transparent blit a un memory leak...
Tu peux aller voir sur
http://www.mvps.org/EDais/
Libraries


pour
Chroma-blit
qui permet la même chose sans fuite de mémoire

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Sundowne" a écrit dans le


message de
news:%
Sergio wrote:
Re-bonjour,

merci pour la technique avec deux picturebox dont un
caché et avec la méthode Paintpicture : tout marche au
poil ... sauf que la transparence que j'avais avec
l'image GIF, disparait lors du passage à la méthode
PaintPicture. Comment faire pour garder cette
transparence ?
Merci beaucoup pour vos avis éclairés.
@+



'Jour
Plutôt que picture.paintpicture pour faire la copie




entre le buffer et
l'écran , utilise l'api
Declare Function TransparentBlt Lib "msimg32.dll"




(ByVal hdc As Long,
ByVal x As Long, ByVal y As Long, ByVal nWidth As




Long, ByVal nHeight
As Long, ByVal hSrcDC As Long, ByVal xSrc As Long,




ByVal ySrc As
Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As




Long, ByVal
crTransparent As Long) As Boolean

pour avoir une couleur transparente .

Voir un exemple chez Allapi.

@+




.



Avatar
ng
Salut,

Je n'ai pas ce genre d'effets sans autoredraw=true.
Simplement, quand une form passe au dessus d'un autre, le contenu est
effacé


Ca se passe chez moi pour un fréquence de refresh elevée, l'effet de
scintillement n'est pas tout a fait le même qu'avec une ImageBox (là
apparaition de lignes horizontales...)

Mais avec cette technique par contre, j'ai du scintillement...


lol bah décidement...

je vais essayer de refaire des exemples pour voir ce qu'il en ait ;)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



François Picalausa a écrit :

Hello,

Mais surtout, n'oublie pas de mettre en AutoRedraw=True, sinon tu
retrouveras certains effets désagréables de scintillement...



Je n'ai pas ce genre d'effets sans autoredraw=true.
Simplement, quand une form passe au dessus d'un autre, le contenu est
effacé

Sinon tu peux utiliser un UserControl (avec gestion de masque pour
la transparence...)



Propriétés MaskPicture, MaskColor, et BackStyle...
Mais avec cette technique par contre, j'ai du scintillement...


Avatar
François Picalausa
Hello,

Effectivement, mea culpa, il ne clignote pas.
C'est quand on update souvent le masque qu'il clignote...

Par contre, avec un backbuffer, sans autoredraw pour la surface de
destination, ça ne clignote pas non plus.
'Sur une form avec un picturebox pctBackBuffer
'Un timer1.interval = 1
'bitmap c:test.bmp
Option Explicit

Private PictureObject As Picture

Private Sub Form_Load()
Set PictureObject = LoadPicture("c:test.bmp")
Me.ScaleMode = 1
'Obligatoire sur le backbuffer pour voir qqch
pctBackBuffer.AutoRedraw = True
pctBackBuffer.Visible = False
End Sub

Private Sub Timer1_Timer()
Static X As Long

X = X - Screen.TwipsPerPixelX
If X < -PictureObject.Width Then X = Me.ScaleWidth

pctBackBuffer.PaintPicture PictureObject, X, 0
Set Me.Picture = pctBackBuffer.Image
pctBackBuffer.Cls
End Sub

Par contre, si tu le fais sans backbuffer, ça clignote...
Mais ça, avec ou sans autoredraw (si ce n'est qu'en autoredraw = true, ça ne
se voit que sur les systèmes plus lents).

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ng" a écrit dans le message de
news:
Chez qui ca clignote ? ;)


Salut,

Je n'ai pas ce genre d'effets sans autoredraw=true.
Simplement, quand une form passe au dessus d'un autre, le contenu
est effacé


Ca se passe chez moi pour un fréquence de refresh elevée, l'effet de
scintillement n'est pas tout a fait le même qu'avec une ImageBox (là
apparaition de lignes horizontales...)

Mais avec cette technique par contre, j'ai du scintillement...


lol bah décidement...

je vais essayer de refaire des exemples pour voir ce qu'il en ait ;)


Hello,

Mais surtout, n'oublie pas de mettre en AutoRedraw=True, sinon tu
retrouveras certains effets désagréables de scintillement...



Je n'ai pas ce genre d'effets sans autoredraw=true.
Simplement, quand une form passe au dessus d'un autre, le contenu
est effacé

Sinon tu peux utiliser un UserControl (avec gestion de masque pour
la transparence...)



Propriétés MaskPicture, MaskColor, et BackStyle...
Mais avec cette technique par contre, j'ai du scintillement...






1 2