LOGICIEL DE RETOUCHE PHOTO STYLE PHOTOSHOP (29 EFFETS)

KL - 20 mai 2001 à 03:01
 Utilisateur anonyme - 12 nov. 2004 à 22:40
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/1166-logiciel-de-retouche-photo-style-photoshop-29-effets

Utilisateur anonyme
12 nov. 2004 à 22:40
2001 la date de la source, j'ai commencé la prog et l'info mi-2000, du coup j'avais pas enormement de connaissance ni d'experience a l'epoque...
Comme je l'ai deja dit, si je devait le refaire, j'utiliserai le traitement en memoire, voir je reprogrammerai le soft en le basant sur des dll codé en asm, maintenant que j'ai la connaisance pour le faire, histoire de vraiment utiliser de maniere optimum la puissance du cpu... mais j'ai d'autres choses a faire plus utiles, moins utopique que de concurrencer photoshop ;)
La source est là, les algo sont simple a dechiffrer, si qqun vx reprogrammer le soft il n'y a aucun probleme!
Je serais heureux de savoir que mon code ou mes algo peuvent etre utiles...
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 nov. 2004 à 22:07
Je sais, j'arrive bien après la bataille, mais voilà : j'ai fais une classe de gestion d'image se basant sur les fonctions de l'API Windows GetDIBits et SetDIBits qui permettent de gagner environ 30x plus de temps que les classiques GetPixel/SetPixel. Je te suggère donc d'utiliser ma source pour augmenter la vitesse de traitement car c'est vrai que c'est assez lent quand même. Dommage que je n'ai pas le temps de prendre la relève de ce soft.

Excellent soft, dommage qu'il soit aussi lent pour certains filtres !

Tu pourrais y gagner pas mal de temps également en mettant des DoEvents dans tes boucles !

8/10

DarK Sidious
Utilisateur anonyme
29 avril 2004 à 17:23
cool!
suis content que qqun reprenne le projet :D
tient moi au courrant!
Utilisateur anonyme
29 avril 2004 à 17:09
Moi je l'aime bien cegenre de soft, je vise pas Adobe, mais bon, je vais surement le refaire... rien que pour continuer l'optimisation j'ai refais ta fonction d'effet de bruit :

Public Sub Blur2(ByVal Taux As Integer)
Dim cnt As Long
Dim x As Long
Dim y As Long
Dim maxp As Long

maxp = UBound(PicBits)

For cnt = 1 To maxp Step 3
x = cnt + CInt(Rnd * Taux)
y = x + (CInt(Rnd * Taux) * BytesPerLine)
If y > maxp - 3 Then y = maxp - 3
PicBits(cnt) = PicBits(y)
PicBits(cnt + 1) = PicBits(y + 1)
PicBits(cnt + 2) = PicBits(y + 2)
Next cnt


End Sub

Je suis passé de 12,5 Secondes d'execution à 550 Millisec, et le tout en mode execution sous VB autant dire qu'en compilé ce sera instantané.

Vivement les vacances d'été, je sent que je vais m'amuser :)
Utilisateur anonyme
29 avril 2004 à 16:14
lol
merci de ce long commentaire, c tres instructif :)
ce code a 3 ans deja!
depuis je traite en memoire ce genre de donnée, mais je ne compte pas updater le code, je ne fait plus de vb...manque de tps, et surtout je prefere les langages plus structurés; action script, java...

mais si qqun vx updater pour poster sous son nom, c pas un prob ;)
Utilisateur anonyme
29 avril 2004 à 15:52
Je suis certain qu'avec visual basic on peut avoir les mêmes résultats qu'adobe au niveau rendu, le seul pb c'est qu'on utilise pas les mêmes methodes.

J'ai remarqué qu'avec un :

f.p.Visible = False
avant le Select Case Index de la form Menu_FX et en le remettant à true aprés on gagne un temps non négligeable pour une petite image 400 * 400 environ 800 Millisecondes (en mode non compilé) ...

Alors maintenant on va essayer de voir pk t'as ton moteur qui est deux fois plus lent que celui d'adobe...

Tout le monde va penser que c'est à cause de VB. La fonction inversant les couleurs d'une image devrais être instantanée, sur un P3 500 elle prend 2400 Msec ...

Je regarde donc le code que tu as écrit :

Sub Invert(picBox As PictureBox)
'Invert the image of a picturebox
Dim newVal As Integer, h As Integer, W As Integer, K As Integer
Dim C As Long
Dim opRed As Long, opBlue As Long, opGreen As Long

picBox.ScaleMode = 3

For h = 0 To picBox.ScaleHeight
For W = 0 To picBox.ScaleWidth
C = GetPixel(picBox.hdc, W, h)
RGBfromLONG C
opRed = 255 - rRed
opGreen = 255 - rGreen
opBlue = 255 - rBlue
C = RGB(opRed, opGreen, opBlue)
GetPixel picBox.hdc, W, h, C
Next W
pictBox.Refresh
Next h
End Sub

Temps d'execution 2350 MS

Je vais donc chercher à l'optimise, j'eneleve le rafraichissement qui prend beaucoups de temps horloge :

For h = 0 To picBox.ScaleHeight
For W = 0 To picBox.ScaleWidth
C = GetPixel(picBox.hdc, W, h)
RGBfromLONG C
opRed = 255 - rRed
opGreen = 255 - rGreen
opBlue = 255 - rBlue
C = RGB(opRed, opGreen, opBlue)
GetPixel picBox.hdc, W, h, C
Next W
Next h

Temps d'execution 1863 MSec, donc environ 500 Msec, ce qui fait une grosse partie du code.
Je vérifie maintenant l'efficacité des apis que t'utilises :

For h = 0 To picBox.ScaleHeight
For W = 0 To picBox.ScaleWidth
C = GetPixel(picBox.hdc, W, h)
GetPixel picBox.hdc, W, h, C
Next W
Next h

Résultat 1360 MS rien que pour executer ces deux fonctions !!!! En gros y'à vraiment un gros besoin d'optimisation car

For h = 0 To picBox.ScaleHeight
For W = 0 To picBox.ScaleWidth
Next W
Next h

Ne me prend que 10 MSec ...

Maintenant je vais te dire pourquoi c'est lent (Et encore ... ton code est bien optimisé) ...

Tu charges lors de chaque filtre la matrice des points en mémoire, alors que tu pourras simplement traiter en mémoire cette matrice que lors du chargement, et la modifier au fur et à mesure.
Pour cela utilises GetBitmapBits pour charger cette matrice en mémoire, et une fois tous les points traités utilises SetBitmapBits pour rafraichir le dessin.

Pour te donner un ordre d'idée j'arrive à 400 Ms en mode debuggage sous VB pour l'inversion de couleur.

Je te donne le code pour que tu puisse tester.

Au début du module image32 ajoute ces déclarations :

Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim PicBits() As Byte, PicInfo As BITMAP
Dim Cnt As Long, BytesPerLine As Long

Ensuite dans ce même module remplace la fonction Invert par celle-ci :
Public Sub Invert()
'Invert the image of a picturebox
For Cnt = 1 To UBound(PicBits)
PicBits(Cnt) = 255 - PicBits(Cnt)
Next Cnt
End Sub

Puis ajoutes ces deux fonctions dans le module :

Public Function LoadPicture(ByRef pictBox As PictureBox)
GetObject pictBox.Image, Len(PicInfo), PicInfo
BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
GetBitmapBits pictBox.Image, UBound(PicBits), PicBits(1)
End Function

Public Function RefreshPicture(ByRef pictBox As PictureBox)
SetBitmapBits pictBox.Image, UBound(PicBits), PicBits(1)
pictBox.Refresh
End Function

Ensuite dans le form Menu_FX ajoutes ceci à la fin de la procédure Form_Load :

image32.LoadPicture f.p

Dans ce même form remplaces la procédure menueffect_click par celle-ci :

Private Sub menueffect_Click(Index As Integer)
On Error Resume Next
Dim tps1 As SYSTEMTIME
Dim tps2 As SYSTEMTIME

undo.u(u).Picture = f.p.Image
u = u + 1
If u > 5 Then
u = 5
undo.u(0).Picture = undo.u(1).Image
undo.u(1).Picture = undo.u(2).Image
undo.u(2).Picture = undo.u(3).Image
undo.u(3).Picture = undo.u(4).Image
undo.u(4).Picture = undo.u(5).Image
End If

GetSystemTime tps1
Select Case Index
Case 0 'invert
Call Invert
Call image32.RefreshPicture(f.p)
Case 1 'XNoise
Call Blur2
Case 2 'Mosaic
val1.Show
Case 3 'blur
val2.Show
Case 4 'gray
GrayScale f.p
Case 5 'L+
Lighten 15, f.p
Case 6 'L-
Darken 15, f.p
Case 7 'STraT
StraT 5, f.p
Case 8 'T°c
Thermique f.p
Case 9 'Aqua-R
Aquarelle f.p, 5
Case 10 'Photo19
Photo f.p
Case 11 'RGBFX
FX f.p
Case 12 'Xblack
XBlack f.p
Case 13 'H2O
H2O f.p
Case 14 'photocop
photocop f.p
Case 15 'comic
BD f.p, 1, 10
Case 16
findRep.Show
Case 17
flash f.p, 1, 10
Case 18
val3.Show
Case 19
Noise f.p, 500
Case 20
Flip_Horizontal f.p
Case 21
Form2.Picture1.Picture = f.p.Image
SavePicture Form2.Picture1, "c:\windows\FXpaper.bmp"
Call SystemParametersInfo(20, 1, "c:\windows\FXpaper.bmp", 1)
End Select
'f.p.Visible = True
GetSystemTime tps2
Dim reste As Long
reste = ((tps2.wSecond - tps1.wSecond) * 1000) + (tps2.wMilliseconds - tps1.wMilliseconds)
MsgBox reste & " millisecondes"

f.p.Refresh

undo.u(u).Picture = f.p.Image
undoE.Enabled = True
End Sub

Voilà donc comment booster ton systéme et diviser le temps de traitement de plus de 5 Fois !...

Maintenant mon explication finie, je vais vraiment critiquer ta source :
-> Interface mal faite, fonctions de dessins mal gérées, code pas optimisé, peu de paramétres sur les filtres

Quand à tes critiques sur le Visual Basic, je te répondrais ainsi qu'à tous ceux qui pensent la même chose que toi, le visual basic n'est certes pas un language natif, cependant la lenteur de vos algorithmes c'est à vous qu'il faut vous la reprocher.

Faudrais pas oublier que le VB est compilé et que IF sera toujour écrit comme un jmp en ASM que ce soit du VB ou du C++.
scalp57 Messages postés 1 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 14 juillet 2003
14 juil. 2003 à 12:08
Terrible ! T'es fort toi, hein ! Heu... ben... y a rein a dire hien !...
Proutie66 Messages postés 141 Date d'inscription samedi 19 octobre 2002 Statut Membre Dernière intervention 14 avril 2008
5 janv. 2003 à 17:17
ben put1!!!
En plus vous dites ke cest pas rapide mais bon adobe c 2* + rapide mais ca vaut : 1000 ??????? !
cs_Dalamar Messages postés 63 Date d'inscription samedi 22 décembre 2001 Statut Membre Dernière intervention 22 décembre 2003
23 déc. 2002 à 23:56
génial
cs_Koiu Messages postés 269 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 19 février 2015
26 sept. 2002 à 11:44
CCool!!! 10/10!!!!
crossblade Messages postés 113 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 3 février 2007
5 juil. 2002 à 22:07
rien à dire.... excellent prog 10/10
Utilisateur anonyme
17 juin 2002 à 18:04
lol
VB6Boss Messages postés 71 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 15 juin 2002
17 juin 2002 à 18:00
Et merde jarrive toujours en retard ctriste tout ca !!!! Sniff !!! C pas de ma faute je conaissais pas VB avant sniff.... Et maintenant tous les filtres que je me suis casse la tete a fere ===>> POUBELLE sniff
c triste tout ca sniff sniff :-(
Utilisateur anonyme
13 juin 2002 à 17:40
desolé, mais G pas le courage de reprendre la programmation du logiciel...
G plein d'autres projet, dont celui de me reconstruire des site web car je n'en ai plus aucun!

Par contre, si qqun vx recuperer les fonctions du prog ou tout simplement le modifier, ya pas de problemes pour ça!
VB6Boss Messages postés 71 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 15 juin 2002
13 juin 2002 à 16:36
Tres bon code. Mias tu pourrais un peu l'accelerer en enlevant les doevents.
Je suis en train de faire un prog de ce genre et ca accelere vachemant
devmax Messages postés 47 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juillet 2007
6 avril 2002 à 12:43
et BlackWizard tes un boss toi
bravo
jai rarement vu mieux...
filippos Messages postés 50 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 17 octobre 2002
3 mars 2002 à 14:45
Put1 t'es trop fort toi coment tu fait tt ca c tt simplement magnifique!!
Je suis debutant et je pense pas k'un jour j'arriverais a faire un gramme de ce ke tu as fait !!!
10/10
Respect (lol)
TiF'oU
JuJu le hacker débutant
7 déc. 2001 à 22:08
Une seul mot : SUPER !!!
Bravo ...
Utilisateur anonyme
20 oct. 2001 à 20:33
suis pas megalo!
et puis, c'est pas mon meilleur prog!
va voir Visual C++...

Visual Cpp Builder, Black-FX et Visual HTML Dev vont etre publiés dans L'echo du Village Papier...cool, non?
Bravo.
Pas mal de faire cela à 16ans
Mais bon, faut arreter de s'extasier car faudrait pas que tu prennes la grosse tete... non ...

En DirectDraw sous VC++, ca pourrait tourner bcp plus rapidemment...
Et honnetement, je trouve ton prog tres joli, mais les algos sont pas specialement impressionnant quand on connait un peu le monde du TS (pardon, traitement du signal) qu'en est-il de filtre de prewitt ? etc? contour ? qui sont tous aussi killant ;-)

sinon, soit pas megalo et tu seras vraiment cool.

Nico
Utilisateur anonyme
30 sept. 2001 à 12:34
CDI? kesako?
Salut si tu veus améliorer la vitesse de ton prog fais l'invertion et tout sa en CDI
c'est super rapide!!
il est génial ton prog
Utilisateur anonyme
28 août 2001 à 02:37
je compte pas bosser avec du VB!
Le VB C de la merde...
C parceke j'ai pas encore le niveau en C++ mais je compte reecrire ce prog en C++ (version GTK/linux, desolé pour les autres!)
Super ton prog! On voit que tu connais ton domaine... Je mets 10/10! Sauf que... le code est vraiment mal écrit... ça pas de bon sang... si tu veux te faire engager quelque part, il va falloir que tu écrives du code plus lisible que cela... Aussi... Tu aurais du utiliser des valeurs de retour pour les fonctions au lieu de toujours des globals... Mais c'est pas grave! Le prog est super! J'vais t'envoyer une version optimiser si tu veux... Je travaille dessus présentement.
Ca serait peut-être plus rapide en passant par DirectDraw, en mettant l'image dans un buffer, tu peux déjà utiliser les filtres de DirectDraw pour quelques effets (transparences, etc...)

Pour accélérer tu dois aussi penser à pouvoir travailler non pas pixel après pixel : travailler avec un bloc de pixels serait plus rapide : tu met un bloc en mémoire, sous la forme d'un grand nombre, et tu effectue ton opération mathématique.

Enfin, si tu passe par direct 3D tu peux utiliser l'accélération 3D pour certains effets de Zoom, de déformation 3D...

De plus ca serait pas mal de pouvoir développer la dessus un composant ActiveX pour appliquer les filtres dans d'autres projets.

A+ et bonne optimisation
j'ai une nouvelle version avec degadé de couleurs etc mais je retrouve plus le source!
snif!

je vais essayer de le retrouver et faire les modif proposés!

@++ et merci!

www.guestfactory.fr.st
lightness t bien gentil, mais le menu en sizable, c vachement pô professionnel, serieux, koi..
Lightness1024
30 juin 2001 à 00:24
c vraiment pas possible de le laisser faire des effet complexe pendant autant de temps. il faudrait au moins pouvoir rapeticir pour le faire travailler en tache fond.
augmente un peu la priorité de l'apli!
met des barres de progression puiske tu dis ke c ton code ya po de probleme tu les met dans les boucles et c hyper utile.
super projet mais pffou g du changer la valeur de menu.widht yavai ke 2 menu ki s'affichait tu ferait mieu de laisser en sizable.
derniere critique, commen en anglais, finit en anglais steuplait, ca fait vraiment sale de voir de l'anlais puis pourf d'1 coup, ta une aide a 2 francs en francais dans un super log de retouche photo ki dechire. c pas serieux tu va me faire un fichier d'aide a la Talkative (regarde le meme si tu n'a pas AOL, il est dans la section internet de vbfrance) avec html help workshop c un minimum de faire un ficheir d'aide a la hauteur du logiciel et tout en englais ou tout en francais bordel!

desolé d'etre dur mais c ou t strict et tu t'ameliores, ou t laxiste et tu fais des codes sales... medite la dessus.

@+; Lightness1024! <- celui ki è 1 max severe
ah pis y manque aussi la possibilité de faire des selections...mais ca je pense pas que je serais capable de le faire...;(
si tu veux, je les fais ces modifs, pis je te l envoie apres
nan ya rien a dire ca dechire.
tres bon, c clair...ya juste trois ptits details : drag&drop de l explorer vers ton image pour l ouvrir
possibilité de travailler l'image en agrandi ou rapetissi
agrandir ou rapetisser l image comme pour la deplacer
un mode mdi?? bôf c juste une question de gout, mais j aime bcp mieux (lol) le mdi, si en plus c t du vrai mdi avec la possibilité d taffer plusieurs images et pis qui supporte le copier coller entre plusieus image, voire le glisser deplacer...

c juste ce qui manque un peu a mon gout pour taffer avec comme on se servirait de photoshop (oui oui, c vrai : vraiment bien)
wouaw !!!!
couriousous
21 juin 2001 à 12:20
mmmoooorrrttteeelll
Impossible de ne pas mettre 10/10
Utilisateur anonyme
1 juin 2001 à 12:35
un autre effet trop cool aussi avec une photo couleur, pas un dessin:
tu applique l'effet photocop, tu purifie l'image avec l'effet X-Black et normallement, tu as une photo bi-color.
là, tu change les couleurs avec le pot de peinture et ça fait un super resultat!
(ce sera la capture d'ecran de la version 3.0!)
Utilisateur anonyme
1 juin 2001 à 12:31
la photo de la capture c'est une photo numerique avec l'efet strat (*6) et une application d'un filtre vert...
cool, non?
Putain, cé zoli... surtt ta photo k'est du + bel effet ;)

Par contre t'as plein de zip...! Cé zoli ça aussi! on dirait ke t'aime bien allégé ton bureau!!... ;)

Bone continuation...!! 1 vers° 3.0 ?? Super, alors grouille pr le pondre sur VBFrance.com..!!! ;)

Bone prog'!!!

Gogogogoooooooo
Utilisateur anonyme
30 mai 2001 à 00:22
alors, vous en pensez quoi de cette nouvelle version??
(la V3.0 est en preparation serieuse!)
compilez le en code natif, ca va + vite
Utilisateur anonyme
22 mai 2001 à 11:15
+ rapide?
c'est du VB, pas du C++ ou du Delphi!
je vois pas comment rendre plus rapide car c'est deja pas mal acceléré!
Et bien bravo !! vraiment, continue à rajouter de nouveau filtre et heu...essai de les rendres plus rapides.
J'aurai bien aimé travailler avec toi, seulement, je bosse sur un client IRC...disons, que en plus de ca, j'ai quelques problèmes...

Voilà.
Bonne prog
Utilisateur anonyme
20 mai 2001 à 23:41
ouai, les algos sont de moi sauf le flou que j'ai readapté d'un source de planet-source-code.com
Les algos pour les effets c de toi ?
Sa a l'air puissant ton prog! Mais merde, y faudrait que je réinstalle VB6 pour voir si c'est vraiment hot!! Mais entk... continue comme sa! sa a l'air hot!
Utilisateur anonyme
20 mai 2001 à 12:55
OK.
je vais mettre l'exe pour la version prochaine (en cour de preparation)...
d'ici le 20/05 ou 21/05...
Putain ca a l'air terrible !!
Mais heu...faudrait mettre l'exe stp.

MERCI
Rejoignez-nous