BARGRAPHE POUR VUMETRE

Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010 - 26 mars 2010 à 11:53
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010 - 2 avril 2010 à 00:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51503-bargraphe-pour-vumetre

Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
2 avril 2010 à 00:15
Le projet pour lequel j'ai fait ce bargraphe est disponible ici:

http://www.vbfrance.com/codes/CONTROL-UTILISER-PLUS-FACILEMENT-FMODEX-DLL_51542.aspx
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 mars 2010 à 19:29
tiens te prends pas la tête est bosse la dessus :
http://www.vbfrance.com/codes/AMELIORATION-VU-METRE-LUCIOL44_51519.aspx
@++
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
28 mars 2010 à 18:25
Merci ADN56, je viend de voir ca je ne contrend pas non plus cette dent de scie. Si non pour le VBarGraphe (VingtBarGraphe) je vais en faire un modulable en nb de bar. Mais le code n'est pas trop compliqué a rectifier pour passer de 20 a 10. Il faut redim les tableaux, redim la bitmap et redim les boucle k. Je vais te faire ca dans la soirée.

Merci a++
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 mars 2010 à 18:15
avec :
Private Sub BarGraphe_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
'quand il est pas visible on coupe les timers
Timer1.Enabled = Me.Visible
End Sub
ou sans d'ailleur (fonction supprimée)
je tombe à 1% de cpu, mais à chaque fois que la form est cachée le fichier d'échange monte !
je bosse dessus....
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 mars 2010 à 18:04
je viens de tester ta nouvelle source :
8% utilisation maxi de la cpu, en revanche le fichier d'échange monte à plus de 300mo (de 700 à 1Go chez moi) lorsque la form est caché et ce en dent de scie.
étrange....
Pour finir revois ta form principal car chez moi elle fonctionne, mais avec un plantage sur le designer.
une fois compilé c'est OK

amélioration pour le Vbar :
redimensionnement complet, pas seulement la hauteur
nombre de colonne réglable, ici 20 mais si j'ai que 10 bandes de fréquences ?

Bon boulot, continu.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 mars 2010 à 17:48
Et bien tu peux utiliser la sub paint appellé par le invalidate()
comme le dis bigboss et raccourcir le code
ex :
'quand il est pas visible on coupe les timers
245. If Me.Visible = False Then
246. Timer1.Enabled = False
247. End If
devient :
'quand il est pas visible on coupe les timers
245. If not Me.Visible then Timer1.Enabled = False
ou encore mieux
'quand il est pas visible on coupe les timers
timer1.enabled = me.visible
++
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
28 mars 2010 à 12:50
Merci ADN56, la modification a ete apportée. Dans les proprietes on a le choix entre un panel de couleur ou de les rentrer a la main (R;V;B).

Voila, et si d'autre petite chose peuvent etre amelioré, n'esite pas.

Merci a tous.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 mars 2010 à 12:26
T'inquiéte, bigboss à toujours beaucoup de mal à s'exprimer sans être irritant pour le moins. Mais il à raison pour les couleurs c'est pour cela que je t'ai filer l'idée de voir comment je les utilise dans mes sources. C'est tout de même vachement plus sympa d'avoir le choix de la couleur via le colorpicker.
Ex :
Private choix_Couleur As Color
Dim Colorbox As New ColorDialog
If Colorbox.ShowDialog = Windows.Forms.DialogResult.OK Then
choix_Couleur= Colorbox.Color
End If

Pour retrouver une couleur depuis l'ARGB :
Dim r, v, b As Byte ' rouge,vert,bleu de 0 à 255
choix_Couleur = Color.FromArgb(255, r, v, b)
'le premier 255 est l'opacité.

@++
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
28 mars 2010 à 10:47
Non desolé Renfield, je n'ai pas testé ton idéé. Comme je te l'ai deja dit, il y a une memoire des pique comme dans un vrai vumetre, ce qui obligerai a faire plusieur decoupage de l'image pour afficher la partie eteinte puis le pique puis une autre partie eteinte et enfin les bar allumées. En plus comme j'ai trouvé autre une solution qui prend beaucoup moin de resource (Drawline x 4 remplacé par un seul FillRectangle), je crois que je vais resté sur cette idée. Si non pour les couleur je t'avourai que j'ai encore beaucoup de mal avec les variable couleur de VB.Net. Comme j'ai pas trouvé d'exemple d'utilisation (j'ai un peu cherché mais j'avais d'autre chose a faire dans mon projet), mais si tu as un tuto qui explique comment fonctionne les Pen, Brush, Color et autre, je le mettrai dans mon code. Je voulai que les couleurs soient vraiment libre et non pas avoir une liste de coleur predeffini.

Merci a tous.

PS: ce projet s'inscrit dans un lecteur audio basée autour de la dll Fmodex, pour une troupe de cabaret amateur.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 mars 2010 à 06:31
"-Pour les couleur, je c qu'il existe d'autre facon de faire, j'ai chisi celle-la et c mon choix. A toi de modifier le code pour tes besoin."

sympa de te faire des critiques constructives... tu tapes au clavier avec tes coudes, et en plus t'es humble...
royal ^^

ne dis pas des choses comme "j'ai choisi celle la et c'est mon choix"

entre avoir un panel permettant de choisir une couleur visuellement, et taper la valeur nunmérique correspondante, y'a pas photo...

après, si la raison est qu'il est plus facile d'enregistrer un simple entier (base de données, fichier, etc) pour le restaurer depuis le code, RIEN ne t'en empèche quand bien même tu as proposé une propriété typée As Color !

As tu testé mon idée d'optimisation ? (ne pas tout redessiner)
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
28 mars 2010 à 00:42
Juste pour info Bigboss9, au cas ou tu l'aurai pas vu, le timer sert a faire une derivée numerique. Juste pour que tu comprenne un peu mieux le code. Suprime le timer et le bargraphe marche quand meme mais pas la memoire du max.

Merci a+.
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
28 mars 2010 à 00:34
Donc bigboss9,
-Pour les couleur, je c qu'il existe d'autre facon de faire, j'ai chisi celle-la et c mon choix. A toi de modifier le code pour tes besoin.

-Il n'y a pas de double buffer dans mon control. Alors pressise a qui tu parle pour ca

-Et pour finir, le timer n'est pas la pour faire jolie ou pour actualiser l'affichage mais juste pour faire l'effet de memoire du max. En plus, si tu regarde bien, il est coupé quand le bargraphe retombe a zero.

-Enfin, ce n'est pas un pauvre division de plus ou de moin qui bouffe des ressources ou de la ram comparé au traitement d'un bitmap stoquée dans la ram (temps d'une division ridicule).

Je ne sais pas depuis cb de temps tu prog en VB.Net, moi j'ai commencé il y a 3 mois et je trouve que tes critique sur un code que tu n'as pas tout a fait compris ne sont pas tres constructive.

merci quand meme.
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
28 mars 2010 à 00:13
ADN56 a tu retesté la nouvelle source pour voir si elle pompai moin sur ta config? sur la mien (dualcore avec 4Go ram) elle n'est presque plus detectable, juste de temps en temps 3% (contre 40% avant). Tiend moi au courant merci.

ps: quand j'aurai fini mon autre projet (control utilisateur pour la dll Fmodex) je ferai le bargraphe modulable en nb de bar.
cs_bigboss9 Messages postés 162 Date d'inscription jeudi 22 janvier 2004 Statut Membre Dernière intervention 20 juillet 2013
28 mars 2010 à 00:01
'Vindiou le bordel la d'dans ...

Je vais essayer de m'expliquer clairement et en procédant dans l'ordre.

- Une couleur un Integer->Conversion vers du RGB = des ressources utilisées pour RIEN.
Dim mColor as Color.FromARGB(Alpha,Red,Green,Blue)

- L'activation du DoubleBuffer NE SERT A RIEN dans la mesure ou tu essayes de faire un pseudo double buffer "maison", sauf que c'est raté. L'activation de la propriété DoubleBuffered d'un control ne fonctionne QUE LORSQUE LES INSTRUCTIONS SONT ECRITES DANS LA SUB PAINT() du control. C'est ton objet Bitmap qui prend le plus de ressources en RAM.

- Pour finir, l'erreur la plus absurde est d'avoir mis ton stupide Timer dans ton control. Tu as un control VueMètre, c'est bien. La gestion de son affichage, de l'actualisation des données ne se fait pas à l'intérieur de celui-ci mais par le programme qui l'exploite. Ainsi, pour économiser les ressources, on actualise uniquement si les données changent ... et non à interval régulier.

- Ne fais pas d'opérations de calcul inutiles. Les divisions sont TRES couteuses. Le .Net n'est pas réputé pour sa rapidité d'execution. Il faut optimiser tes calculs, en faire le moins possible. La solution ? Lors de l'initialisation de ton control et à son redimensionnement, calcule toutes les possibilités d'affichage de tes valeurs. Ensuite, il suffit de récupérer les valeurs calculées une fois pour toute et non à chaque itération du timer.

Sur ce, bon courage.
5/10 pour l'effort.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 mars 2010 à 16:58
regarde une de mes sources sur les bargraph pour y piocher des idées sur les couleurs et autres dégradés
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
27 mars 2010 à 14:45
J'ai trouvé une solution, plutot que d'utiliser la fonction "DrawLine" 4 fois pour faire un rectangle, j'ai utilisé "FillRectangle". Parcontre ce n'est plus un Pen qu'il faut utiliser mais un SolidBrush pour la couleur. En meme temps j'ai aussi repensé l'algo de base pour le simplifier. Ca le rend plus lisible mais pas plus preformant.

Je vous mets ca en ligne des que j'ai fini de faire la source (j'y integre aussi un vumetre de 20 bar)

Merci a tous.
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
27 mars 2010 à 11:37
Merci pour vos commentaire,

Pour Renfield:
je ne peu pas utiliser les deux image comme tu le decri, puisqu'il y a l'effet de memoire du pique du bargraphe. mais utiliser un image du bargraphe vide et n'allumer que les bars voulu ca doit etre fesable. je vais regarder dans cette direction pour voir ca fonctionne.

Pour ADN56:
Alors j'ai utilisé le system de coulor integer parce que je ne savai pas trop comment faire. Je viend du monde VB6 et ca ne fait que 3 mois que je suis passé en VB.Net pour reté compatible avec les nouvelles platforme (vista et seven). donc si vous voyez des petits probleme de ce genre n'esitez pas a me le dir.
Si non, c'est quoi le double buffer que tu as ajouté sur la form? Je ne vois pas se que c'est.

Autrement, n'y a t il pas une solution pour dir qu'une parti du code va etre traité par le gpu plutot que par le cpu? Je dis ca comme ca (sans savoir si c'est possible) mais ca serai peu etre une solution.

Pour info: L'apli final doit tourner sur du monocore avec 512 ram
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
26 mars 2010 à 17:06
pour info (message sur le forum) je monte à 10% de cpu pour 6 VU sur quadcore avec 1Go ram sous Xp.
ps : j'ai ajouter le double buffer sur la form qui recois tes controls ;)
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
26 mars 2010 à 17:00
Sympa comme effet, mais je ne pige pas pourquoi tu n'utilises pas les couleurs en color(arvb) plutot que tes integers défini en héxa ! c'est vraiment moche dans la propriété du control, en plus tu te prive du choix de la couleur par la colordialogbox !
De plus passer par une picture impose des ressource, pourquoi ne pas dessiner directement sur ton control ?
@++ pour la suite car control vraiment bien foutu niveau visuel.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 mars 2010 à 14:39
possible d'avoir deux images.

- une complete
- une vide

et de les garder en mémoire (les recréer si tu changes les couleurs).

pour afficher telle ou telle valeur,

10, par exemple
tu affiche la partie du haut de l'image vide qui va de 11 à 28
et tu affiche la partie du bas de l'image complète.

ainsi, tu ne redessine pas tout, ca deviendra plus rapide et moins gourmand.
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
26 mars 2010 à 11:53
Merci
Rejoignez-nous