UN PROG DE DESSIN TRES PUISSANT

Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010 - 5 août 2004 à 02:56
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010 - 29 mars 2005 à 19:26
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/25176-un-prog-de-dessin-tres-puissant

Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
29 mars 2005 à 19:26
n'hesite pas a me contacter via la messagerie de ce site(pour en pas mettre trop de commentaire), tu c, le truc du noir et blanc, j'ai eu cette idée (ca fé 3 années) en plein cour d'histoire, hahahaha
ikks1 Messages postés 3 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 21 octobre 2008
29 mars 2005 à 11:42
Slt,

Merci pour le principe...Le coup du Noir et du Blanc (les 2 couleurs extrêmes) en color transparente, et une surperposition de 2 images comprenant chacune 1 couleur tranparente, je n'y avais pas pensé.
D'ou l'intêret de bitblt et de tranparentblt.
Merci pour le tuyau...
A+
Ikks1
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
28 mars 2005 à 10:15
hmmm, même si j'ai quitté le vb depuis longtemps vers c#, c'est po grave, je me rappelle ce que j'ai fé dans ce prog, ben, au début, si vous me demander de faire un triangle plein avec des motifs, je crée dans une picturebox pi1 les motifs, je la rempli a fond( limité au triangle),puis, dans une pic2, je dessine le triangle en bleu sur fond blanc rempli(j'utilise une api qui fé des dégradé), puis je copie le pic2 sur pic1 avec le noir comme couleur de transparence,et puis je copie pic1 vers la picrturebox principale de dessin et que le blanc est la couleur de transparence, comme ca, on a un triangle rempli avec des motifs, voila, je suis tjrs la si vous avez besoin de qlq chose.
ikks1 Messages postés 3 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 21 octobre 2008
26 mars 2005 à 19:35
slt,
bravo pour ton soft... mieux que photoshop 9

je cherche à développer un petit prog de dessin et j'ai des problemes pour remplir des cercles avec (alphablend), je vois que tu utilise ça à merveille...

pour les rectangles je n'ai pas de soucis pour rendre le fond transparen mais pour les ellispes, le hic.

j'ai le soucis que le boundind est aussi colorer de facon semi transparente.

Je vois que tu utilise pas mal les bitblt ,strechblt et transparentblt, mais en principe seule une couleur bien définie est rendue transparente mais pas semi-tranparente.

Faut il dessiner un cercle a partir du centre pour que ca marche ??? Dois 't'on utiliser une picture pour la forme , une autre pour la couleur et encore une autre pour le motif????

Dois t'on absolument utilser la méthode vertex???

Bref je galère....................;;

Peux tu m'éclairer ???

Quels est le principe du remplissage de cercle, pinceau etc... Bien que j'ai les codes sous les yeux (ébahis), je n'arrive pas à capter...

voici mon code pour un rectangle dans feuille. mouseup

If Outil 14 And (X0 <> 9999) And (Y0 <> 9999) And Button 1 Then
ClickDown = False
Shape.Visible = True
Feuille.DrawWidth = Slider1.Value

'Gestion transparence Rectangle
Picmerge.Picture = Feuille.Image
Picmerge.Line (X0, Y0)-(x, Y), PicBack.BackColor, BF
Shape.Visible = False
Blend.SourceConstantAlpha = (255 - (Me.HScroll1.Value))
CopyMemory BlendLng, Blend, 4
AlphaBlend Feuille.hdc, X0, Y0, x - X0, Y - Y0, _
Picmerge.hdc, X0, Y0, x - X0, Y - Y0, BlendLng
'fin gestion transparence Rectangle

If Check1.Value = 0 Then
Feuille.FillStyle = 0
Feuille.FillColor = PicBack.BackColor
Feuille.Line (X0, Y0)-(x, Y), PicBack.BackColor, BF
Feuille.Line (X0, Y0)-(x, Y), PicFill.BackColor, B
X0 = 9999
Y0 = 9999
Else
Feuille.FillStyle = 1
Feuille.Line (X0, Y0)-(x, Y), PicFill.BackColor, B
X0 = 9999
Y0 = 9999
End If
Shape.Visible = False
End If
Feuille.Refresh

End Sub


Ca ça marche mais pour une ellispe/cercle, je n'y arrive pas...

As tu dû passer ("de force")par une autre méthode pour remplir ce cercle.

A +

ikks1
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
26 févr. 2005 à 14:36
plus de commentaire???
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
10 août 2004 à 14:08
merci pingouin
cs_Pingouin Messages postés 262 Date d'inscription lundi 26 août 2002 Statut Membre Dernière intervention 24 août 2005
9 août 2004 à 16:35
C'est vrai que toutes les archives compressées c penible. Sinon tres bon prog il merite plus que 5/10 kanm^m! Je vais etudier un peu ca j'suis sur kil ya des trucs bien a en tirer ! :Þ

Pingouin
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
6 août 2004 à 20:54
merci pour les conseils
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
6 août 2004 à 20:16
>> "c'est faux, il faut faire

redr = 0
If coller = 1 Then
[CODE]
Else
[CODE]
End If "

** En effet, si tu as beoin d'initialiser d'initialiser le contenu de la variable redr à 0 avant de faire le test IF.

Cependant, dans ton code, tu assignes 0 à redr entre le premier et le deuxième test IF, ce qui suggère que tu ne dois pas l'initialiser avant le premier test IF.

pour revenir à ce bloc de code, tu peux aussi définir la variable " coller " comme une Booléen et faire le test comme suit:

If coller Then
[CODE]
Else
[CODE]
End If

Ça ne donne pas d'avantage côté performance mais c'est plus près du langage humain et ça rend le code encore plus conviviale. Nous pourrions traduire par "Si tu colles, fait ceci, sinon fait cela." Alors qu'avec une variable numérique, nous devons traduire par "Si coller est égale à 1 donc fait ceci, sinon fait cela". C'est moins humains dans le sens que la valeur "1" peut avoir plusieurs signification et qu'on doit aller voir plus haut dans le code pour bien comprendre la suite.



>> "et je sais pas comment tu as compris ce prog, c'est difficile de comprendre la logique d'un autre programmeur."

** Là je dois avouer que j'ai triché un peu. En fait, je dirige un département de recherche et je dois reviser à tous les jours les sources de l'équipe du développement.. Avec le temps, on vient à lire le code comme un livre et les modèles de sources peuvent être catégorisés pour une meilleure compréhension de l'ensemble d'un projet. Suffit souvent de bien comprendre la structure du code de la fonction "MAIN" pour savoir que tout le reste respectera ce même modèle. Et surtout avec du VB qui est tout sauf un langage cryptique.


Bonne chance avec le C# ! (petit truc, fait le tour du FrameWork, c'est le meilleur point de départ.. La syntaxe n'est pas importante, c'est le concept qui compte).



MadLucas
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
6 août 2004 à 19:09
pour MadLucas

(4. Autre suggestion.. remplace:

If coller = 1 Then
[CODE]
End If
redr = 0
If coller = 0 Then
[CODE]
End If

Par:

If coller = 1 Then
[CODE]
redr = 0
Else
[CODE]
End If

Comme ça, tu évite de faire un test de trop.)
c'est faux, il faut faire

redr = 0
If coller = 1 Then
[CODE]
Else
[CODE]
End If


et pour ce projet, je l'ai abondoné d'ici 1an, alors je l'ai posté pour aider les programmeurs, vous voyez qu'il est malstructuré, pas de commentaires, c'est seulement parceque le prog était prévu pour une semaine, et quand cette semaine est finie, j'ai complété la prog sans la structuration.
merci pour les trucs d'optimisation if et select case.

et je sais pas comment tu as compris ce prog, c'est difficile de comprendre la logique d'un autre programmeur. et pour m.brunews,il y a winrar qui fait .ace, et même winace, qui gère trop d'extension avec une rapidité compression/decompression
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
6 août 2004 à 18:33
Bon, essayons d'être constructif..

1. Il y a un problème de "refresh" avec la fenêtre d'édition. Il est possible d'accélérer tout ça, même avec VB. Juste à bouger la souris dans la fenêtre d'édition pousse l'utilisation du processeur au plafond (???).

2. Tu aurais intérêt à mieux modéliser tes fonction afin d'éviter les variables publiques.

3. Remplace les On Error Resume Next par une gestion manuelle des erreurs.

4. Autre suggestion.. remplace:

If coller = 1 Then
[CODE]
End If
redr = 0
If coller = 0 Then
[CODE]
End If

Par:

If coller = 1 Then
[CODE]
redr = 0
Else
[CODE]
End If

Comme ça, tu évite de faire un test de trop.

5. Le IIf est lent, je te conseil le bon vieux If..Then..Else.

6. Petit vilain, tu utilises le GOTO ! ;-) ... Bien que j'ai rien contre la plupart du temps, tu devrais adopter une meilleure stratégie. Surtout que tu peux facilement le fair epour tous les cas où tu l'utilises dans ton code.

7. Pour les Select Cases.. Les Cases vont faire un tableau de JUMP en assembleur, ce qui est normalement plus rapide que de parcourir une suite de IF..THEN..ELSE.. Cependant, le IF..THEN..ELSE permet de modéliser une hiérarchie des probabilitées et donne la possibilité d'accélérer davantage le programme par sa logique de structure. Par exemple, si un cas est plus probable qu'un autre, alors on le test avec le IF en premier et on test les moins probables à la fin. Comme ça on gagne en vitesse. Le Select Case ne gère aucune priorité...

8. Ta fonction MouseMove, MouseUp, etc sont immenses !! Ça fait peur.. Essaye de fractionner le tout en plusieurs fonctions plus petites. Enlève les GOTO.

9. Tu peux optimiser en utilisant le pointeur de fonction "WITH".

10. Une suggestion, le code sur les FRM devrait être en fonction de l'interface. Place le reste dans des modules. Ce truc te permettra de changer rapidement d'interface et de "reconnecter" ton moteur facilement. Là, si tu changes de FRM, tu dois tout refaire ton code, c'est peu dynamique comme projet.

11. à la place d'utiliser des noms uniques pour des objets relatifs, utilise plutôt un tableau.. exemple:

Ton code..

silhg.Visible = True
silh.Visible = True
silhd.Visible = True
sild.Visible = True
silbd.Visible = True
silb.Visible = True
silbg.Visible = True
silg.Visible = True
taire.Visible = True

Aurait pû être:

For x& = 0 to 7
sil(x).Visible = True
Next x
taire.Visible = True

Placé comme ça dans un tableau, ton code devient plus compact et offre une meilleure vue d'ensemble pour le pauvre programmeur qui doit s'y aventurer. Éliminer la redondance est primordiale pour faire du code propre.

12. Tu ne devrais pas faire de DIM en plein milieu d'une fonction. Garde tes déclaration pour l'entête.

13. Tu devrais aussi faire du préprocess.. Exemple:

Ton code..

HS1.Max = Picture3.ScaleWidth - Picture2.ScaleWidth
HS2.Max = Picture3.ScaleWidth - Picture2.ScaleWidth
...

Devrait être..

myVar& = Picture3.ScaleWidth - Picture2.ScaleWidth
HS1.Max = myVar
HS2.Max = myVar
...


En conclusion, on voit qu'il y a beaucoup de travail dans ce projet. L'impression que ça me laisse cependant c'est que le projet ressemble à un projet codé "sur le fait", sans réel préparation, modélisation ou analyse. C'est comme si tu comemnçais directement à programmer par essais-erreurs.. sans planification. Les variables publics, les trop longues fonctions, les goto, etc. Ce sont tous des choses que tu peux mieux modéliser avec un peu d'analyse.

Bien que le code est long et laborieux et que tu utilises des API, ça n'en fait pas un projet de niveau expert à mon avis, du moins, pas de cette façon.

Je tranche pour un 7/10.


MadLucas
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 août 2004 à 15:20
ACE s'ouvre impec avec winrar (qui connait quasi tous les formats contrairement a winzip).
cs_timo76 Messages postés 9 Date d'inscription jeudi 12 septembre 2002 Statut Membre Dernière intervention 28 mars 2011
6 août 2004 à 15:16
Je pense que ce code doit être intéressant au vu des commentaires mais je ne connais pas les zip "ace" winzip non plus. Comment faire?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 août 2004 à 14:45
Me semble impec, faudrait etre grincheux pour trouver matiere a medisance.
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
6 août 2004 à 14:34
ca va comme ca??
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 août 2004 à 12:49
Vrai que "COMME PHOTOSHOP...." est un peu provocateur, tu pouvais t'attendre a quelques moqueries. Tu pourrais arranger ce titre pour eviter toute polemique superflue.

Maintenant faudrait arreter de vous engueuler, on est pas a la maternelle.
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
6 août 2004 à 10:13
excusez moi pour les zip et rar, c'est seulement pour bien le compresser (<500ko)
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 4 août 2005
6 août 2004 à 00:45
Salut,
C'est vrai que tous les zip (et rar) successifs c'est gênant, mais bon c'est un détail.
J'aime bien, bien fait (la barre d'outils est intéressante).
10/10

"Comme Photoshop", c'est un peu osé comme comparaison ;)
sef6 Messages postés 14 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 6 août 2004
6 août 2004 à 00:03
Un peu chiant tout tes zip, mais sinon super code, Bravo 10/10 ;)
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
5 août 2004 à 02:56
passer un ptit temps sur notre site, et remplissez un peu ce vierge forum

http://www.devportail.tk
Rejoignez-nous