FUSION IMMÉDIATE DE 2 IMAGES

cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 - 22 mars 2004 à 09:14
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 10 mars 2007 à 07:44
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/21354-fusion-immediate-de-2-images

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 mars 2007 à 07:44
merci CORBnet, malheureusement, j'ai plus vraiment le temps de faire de nouvelles sources en vb6, et j'sui passé au java en plus.
CORBnet Messages postés 47 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 7 janvier 2012
9 mars 2007 à 22:31
superbissime Merci chui complétemen daccord avec Yaovi
BZY1 Messages postés 214 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 avril 2008
7 juil. 2005 à 16:11
merci Dark c mieux que le code précédent de NIX et beaucoup plus rapide
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
7 nov. 2004 à 17:56
J'en profite d'ailleurs pour faire une petite mise à jour en permettant un dégradé diagonal entre les 2 images.

DarK Sidious
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
7 nov. 2004 à 17:35
Merci yaovi, c'est vraiment sympa ;)

DarK Sidious
cs_yaovi Messages postés 6 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 21 décembre 2009
7 nov. 2004 à 17:07
dark t'es bon et je t'encourage tu es vraiment bon
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
19 sept. 2004 à 12:32
Wouw
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
19 sept. 2004 à 12:00
Nouvelle mise à jour majeure pour faire un dégradé entre 2 images avec une fusion bien entendu, le résultat est plutôt sympa ! ;) Voir le dégradé pour se rendre compte.

DarK Sidious
cs_Lapou Messages postés 30 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 juin 2008 1
5 août 2004 à 21:39
pr l'enregistrement c nickel merci ;-)

pr le redimensionnement je me pose une question !!! déjà je ne trouve pas paintpicture et ensuite, n'y aurai-til pas une possiblité d'adapter l'image à la taille de la picture box quelque que soit cette taille justement !
car actuellement si l'imga est plus grande est va garder que la partie haut gauche de l'image !

merci encore énormément pour ton aide ;-) pq ton prog est vraiement génial ;-)

Tchao
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 août 2004 à 20:13
Salut Lapou,

La taille de l'image n'a aucune importance : cela augmentera juste le temps de traitement. Il te suffit donc d'augmenter la taille des picturebox pour pouvoir fusionner deux images plus grandes. Maintenant, si tu veux absolument redimensionner tes images, tu peux le faire grâce à la fonction paintPicture de tes picturebox.

Pour l'enregistrement de l'image, excuse moi, je m'étais trompé dans l'ordre des paramètres, cà donne donc :

PCT_RESULTAT.Picture = PCT_RESULTAT.Image
Call SavePicture(PCT_RESULTAT.Picture, "c:\image.bmp")


DarK Sidious
cs_Lapou Messages postés 30 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 juin 2008 1
5 août 2004 à 15:53
Bonjour !!!

Scuse moi de revenir à l'assaut mais 2 questions restent en suspens ;-)

Existe-t-il une possibilité de redimensionner automatiquement les images que je vais mettre pour qu'elles fassent la "bonne taille" ? D'ailleurs si ce n'est pas possible quelle dimension recommande-tu ?

Et enfin à l'évènement clik du commandbutton il me met une Syntax error avec SavePicture("c:\image.bmp", PCT_RESULTAT.Picture) en rouge ! Why ?

Lots of thanks ;-)

Tchao
cs_Lapou Messages postés 30 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 juin 2008 1
28 juil. 2004 à 14:22
Ca me parait ultra parfait à 200% ;-)

Merci bcp
Bonne am ;-)
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 juil. 2004 à 11:32
Rajoute par exemple un bouton de commande, et dans l'événement Click de celui-ci, tu peux rajouter les deux petites lignes que je t'ai donné : ca te permettra de rafraichir l'affichage de l'image de résultat et de l'enregistrer dans le fichier "c:\image.bmp"

DarK Sidious
cs_Lapou Messages postés 30 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 juin 2008 1
28 juil. 2004 à 11:10
Comme je l'ai dit dans mon 1er message, je découvre cet univers de la prog alors ne m'en veut pas trop ;-)

Qd tu me dis "Il te suffit de faire un..." pour moi ça veut pas encore dire gd chose !!! Où dois-je mettre ces 2 lignes ? Comment faire précisemment,...

Merci à toi
Bonne journée :-)
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 juil. 2004 à 10:46
A partir d'un imprim écran ??? Mais tu as bien plus simple : Il te suffit de faire un :

PCT_RESULTAT.Picture = PCT_RESULTAT.Image
SavePicture("c:\image.bmp", PCT_RESULTAT.Picture)

DarK Sidious
cs_Lapou Messages postés 30 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 juin 2008 1
28 juil. 2004 à 08:51
Hello !!!

'tain mais que je peux être con !!! C'est si logique ;-)

En tout cas merci ;-)
Et par contre si je veux enregistrer l'image finale, comment puis-je faire mise à part faire un 'Impr ecran" ;-)

Bonne journée !
Tchao
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 juil. 2004 à 07:18
Salut,

Il te suffit de modifier la propriété Picture des deux picturebox : double clic sur cette propriété dans la fenêtre des propriétés d'un des picturebox, puis tu choisit l'image que tu veux mettre.

DarK Sidious
cs_Lapou Messages postés 30 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 juin 2008 1
28 juil. 2004 à 06:56
Bonjour tout le monde !!!

Totalement débutant dans la prog, je trouve ce code nickel !!!

Cependant je me pose une question sans doute non pertinente : mais comment je dois faire si je souhaite changer les images à fusionner ?

Merci à vous
Tchao
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
24 mars 2004 à 15:19
oui, mais je ne programme (presque) plus sous windows. J utilisais VC++, mais le compilo, c vraiment de la daube, dans le sens ou il laisse passer enormement de fates de memoire. Il vaut mieux opter pour gcc qui est vraiment tres performant! En ce moment, je developpe un jeu sous linux avec un copain. On l ecrit a l aide de la bibliotheque QT, et un peu de sdl pour les quelques sequences cinematiques que nous faisons(pas de "vrais" sequences cinematiques ;) ). En fait, je me sers du vb surtout pour tester mes algos. Comme je te l ai dit, si ca tourne sous vb, ca tourne forcement en C!
Et puis quand j ai envie de pas me compliquer la vie, je developpe en vb (cf voc perfect). Voila, tu sais tout.
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 mars 2004 à 14:42
Ben en fait, j'en suis encore à un apprentissage du C++ avec Visual C++, donc j'apprends à me servir des MFC.

Dès que j'aurais fini cet apprentissage, je commencerais (enfin !) à faire de véritables programmes : mon tout premier sera sûrement la version C++ de mon projet Nouvelle icône que j'ai déposé sur ce site !
J'ai également fait une petite bibliothèque en C pour booster quelques calculs trop lourd en VB, tout comme toi ;-p
Sinon, à la fac, on apprend aussi le C/C++ sous linux, et nous avons fait un programme de filtre sur des images au format pgm (donc des images en niveau de gris), ce qui était assez sympa !

Toi aussi tu fais du C à part faire des bibliothèques ?

DarK Sidious
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
24 mars 2004 à 14:28
c'est pas grave. Par contre, je suis d accord avec toi sur le fait qu il faut utiliser un bon algorithme pas lourd qu un algo lourd ecrit en C. Au moins, si l algo tourne bien sous vb, tu sait que ca ne pose pas de probleme dans la plupart des autres languages....au fait, est-ce que tu programmes en C???
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 mars 2004 à 07:40
lol psycho, je ne voulais absolument pas te froisser ! J'avais bien compris que tu avais tester avec une dll écrite en C et que tu trouvais cela plus rapide, mais tu avoueras tout de même que c'était un peu de la triche : il suffit de faire un prog en assembleur pour éclater un algorithme un peu plus optimisé écrit en VB par exemple ;-)

En fait, je pense qu'il vaut mieux utiliser un bon algorithme en VB plutôt que d'utiliser un algorithme assez lourd en C (ce qui est le cas avec GetPixel/SetPixel car cela entraîne énormément de calculs !)
sans rancune, et je te remercie de ta remarque ;-)

DarK Sidious
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
24 mars 2004 à 01:38
ok, la tu gagnes o la main par contre. C etait donc la variable du slider qui faisait tout basculer....comme quoi...en tout cas, la c'est sacrément rapide.
Remarque : je t aurais poussé à optimiser ton code! c est pas si mal quand même!! ;)

bon, je m avoue vaincu, je te tire ma révérence.
@ ton prochain code
+
psycho
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
24 mars 2004 à 01:26
euh, dark, je crois que tu n as pas lu mon message entierement(et je voudrais bien que tu le fasses la prochaine fois stp :) ), j ai dit que ct apres avoir fait la dll C que ct lus rapide, pas en vb(ok j essayerais de pas faire de faute de frappe la prochaine fois), je suis frapadingue non plus....et j avais fait mon test sur deux images 1600*1200 sur p3 1Ghz 384 Mo ram sdr(et je peut t assurer que ma dll était plus rapide). apres un test sur d autes formatss, plus réduits, tu gagnes pour tout les formats inférieur a 1600*1200 d au moins 1 ms(j'avoue que je comprend pas pourquoi ma dll est plus rapide sur ce format la puisque tu agit sur les bits comme tu le dis plus haut, ce qui signifie beaucoup beaucoup moins de calcul....)
sinon, la je fais le test avec la variable du slider(j avais mm pas vu que tu l avais pas stocké!!) et je te tiens au courant...
@+
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2004 à 13:11
azerty25 : je ne te visais absolument pas personnellement ! je faisais juste remarquer que bon nombre de sources ne comporte aucun commentaire, et même parfois, du code très peu lisible. C'est le risque avec VB : les programmeurs se limite souvent à faire quelque chose qui marche, sans toutefois faire un code agréable à lire et compréhensible. Pour ma part, je reste convaincu qu'un code bien indenté, des blocs de code bien séparés, ainsi que des commentaires bien réalisés (les miens sont trop abondants, je sais !) constitue le principal du travail et permet de détecter les erreurs bien plus rapidement !
Comment tu peux le voir sur toutes mes sources, mes les plus longues, pas seulement celle qui ne dépasse pas les 1000 lignes, sont toutes largement commentées ! Cela prend beaucoup de temps, certes, mais il suffit de prendre l'habitude de le faire, et de le faire dès l'écriture du code pour que cette tâche rébarbative devienne un véritable plaisir ! (une fois de plus, je ne te vise pas personnellement ;-) )

DarK Sidious
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
23 mars 2004 à 12:43
C'est bien que tu commente autant, mais certaines personnes ne commentent pas car c'est impossible de commenter des dizaines de lignes de codes, sa prendrai trop de temps et d'huile de coude. Par contre, dans ton cas, c'est tout à fait possible ;) Je te dit sa car je me suis senti visé :( lol et je ne commente qq fois pas car je ne trouve pas nécessaire, ou encore que j'ai la flemme ;)
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2004 à 08:44
La mise à jour pour la gestion des composantes HLS est faîte. L'effet n'est pas celui que j'espèrait, mais ca donne tout de même un effet plutôt sympa de fusion ;-)

DarK Sidious
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2004 à 08:00
Source mis à jour ce matin pour augmenter la rapidité du programme : j'avais oublié de stocker la valeur du slider dans une variable ! Résultats : 16 ms avec le programme compilé sous un Athlon XP 2400+ ! psycho, tu peux comparer avec une image de même taille et avec ta méthode de GetPixel et SetPixel, cela m'étonnerai fort que tu obtienne les même résultats ! Et ceci même avec une dll C !

A la vue de votre léger engouement pour ce programme, je vais essayer de faire la fusion en me basant sur la luminosité et non sur la couleur pour voir ce que ca donne ;-)

DarK Sidious
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2004 à 07:29
Psycho : Tu trouve ta source plus rapide ??? Tu veux rire là ? Plus de 15 secondes pour arriver au même résultats avec les mêmes images, alors qu'avec ma source, il faut moins d'1 seconde !
Sinon, les fonctions GetDIBits et SetDIToDevice sont des fonctions de l'API et non des fonctions VB, et sont largement plus rapide que les fonctions GetPixel et SetPixel, d'où leur utilisation ;-)

Essaye d'utiliser ces fonctions dans ta dll en C, et tu verra tout de suite le gain de performance !

L'intérêt de passé par ces fonctions, c'est qu'elle ne manipule pas directement les pixels : elles récupèrent les bits de l'image une seule fois, puis les recopie pour appliquer l'image finale, mais entre-temps, tu n'a qu'à manipuler des bits, et non des pixels, ce qui te fait gagné un temps de calcul considérable !

Je te remercie tout de même de ta remarque et de m'avoir fait découvrir ta source.

azerty25 : Je m'efforce de commenter abondament toute mes sources, bien que cela alourdit la lecture d'un code, car ce site est fait pour apprendre et non se creuser les méninges pour comprendre comment fonctionne un code, ce que beaucoup oublie bien souvent sur ce site !

DarK Sidious
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
23 mars 2004 à 06:50
Simple à comprendre grace aux commentaires et assez court ;)
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
22 mars 2004 à 23:43
euh, juste a destination de azerty25, je vois pas en quoi tu trouves ce code simple, mais bon....heureusement, il est tres bien commenté
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
22 mars 2004 à 23:41
j ai fait une source qui donne le même résultat, mais je m était imposé aucune api a l exception de setpixel et getpixel.
Pour ceux que ca interresse(je trouve ca interressant de savoir comment on fait la transparence :) )mon code se trouve à l adresse suivante :
http://www.vbfrance.com/code.aspx?ID=7103

en tout cas dark, c encore une source tres interressante(a mes yeux) que tu nous soumet là. Par contre, sur ma source, quand une fos a dll en C faites, et le programme recodé, je trouve mon code plus rapide...mais ca ne regarde que moi, parce que en vb tout simple, c plutot lent. enfin, je t invite a aller jeter un oeil sur ma source.
je met 9/10, et continue a nous montrer des sources interressantes.
psycho
[8)]
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 mars 2004 à 18:33
Remarque pertinante VeRs_iOn à laquelle je répondrais : pour des raisons de compatibilités tout simplement ;-) En effet, alphablend n'est compatible qu'avec Windows 98, 2000, ME et XP, alors que les fonctions que j'utilise sont compatibles depuis Windows 3.1 il me semble !

DarK Sidious
VeRs_iOn Messages postés 22 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 26 mars 2004
22 mars 2004 à 17:12
hum...et alphablend ?
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 mars 2004 à 12:32
Merci basicInstinct ;-)

DarK Sidious
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
22 mars 2004 à 10:09
trop nickel, bravo :)

@++

BasicInstinct
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 mars 2004 à 09:57
Merci azerty25 !

C'est vrai que ca donne un effet assez fun !

DarK Sidious
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
22 mars 2004 à 09:14
C'est bien sympa et simple : )
Rejoignez-nous