MERGEIMAGES

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 17 déc. 2011 à 11:05
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 24 déc. 2011 à 11:32
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/53871-mergeimages

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
24 déc. 2011 à 11:32
Merci encore une fois, c'est super. Tous tes conseils me serviront dans mes prochains programmes. J'ai fait une mise à jour.
Bonne fêtes de fin d'année.
@+ Le Pivert
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
22 déc. 2011 à 19:20
Bien me voila au bonne endroit cette fois ci LOL !

Alors qu'es ce que tu ma fais là ^^ option strict on !!!!!
tu verras de suite que les strings, singles et autres ne sont pas des integer ralalala, voici la mouture de ton code "optimisé" par mes petits soins (souviens toi je débute, mais ça tiens la route ! enfin le code marche sans planter lol)

Alors ques ce que j'ai fait ? ben plein de chose
1-virer ce qui sert à rien
2-convertir et surtout bien définir les variables
3-virer des function et les remplacer par des sub
4-je me souviens pas de tout, alors que je viens de le faire -_-', la vieillesse me guéte lol

bref voici mon codage :

Option Strict On
Option Explicit On
Imports System.IO
Imports System.Drawing.Imaging
Public Class Form1

#Region "Déclarations"
Dim MergedImage, monImage, Pic1, Pic2 As Image
Dim Wide, High, Decalage As Double ' dimension de merged image
Dim resolution, resolution1, resolution2 As Single
Dim chemin As String = Application.StartupPath & "\MergedImage.jpg"
Dim paysage As Boolean
#End Region

#Region "Ouverture"
Private Sub cmdopen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdopen.Click
Pic1 = open(False) ' 1ère image
If Pic1 Is Nothing Then Exit Sub
resolution1 = resolution 'résolution ppp
Pic2 = open(True) ' seconde image
If Pic2 Is Nothing Then Exit Sub
resolution2 = resolution
If resolution1 = resolution2 _
AndAlso Pic1.Height = Pic2.Height _
Then 'résolution ppp et hauteur image ok
MergeImages(Pic1, Pic2)
Else
MessageBox.Show("Les images n'ont pas la même résolution!", "Impossibilité", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
End Sub
'Fonction de ADN56
Private Function open(ByVal second_image As Boolean) As Image
'Mise en place d'un objet OpenFileDialog pour ouvrir un fichier image
Dim openFD As New OpenFileDialog
With openFD
.Filter = "JPeg Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|Bitmap Files (*.bmp)|*.bmp|Gif Files (*.gif)|*.gif|Icon Files (*.ico)|*.ico|Png Files (*.png)|*.png"
.FilterIndex = 1
.Title = "Sélectionnez le fichier image que vous souhaitez ouvrir."

'Affiche et attend la fermeture de la boite de dialogue
If .ShowDialog() = DialogResult.OK And _
Not (.FileName Is Nothing) Then
'si clic sur OK et nom de fichier <> nothing attribu l'image
monImage = Image.FromFile(openFD.FileName)
resolution = monImage.HorizontalResolution 'résolution ppp
If monImage.Width > monImage.Height Then
paysage = False
Else
paysage = True
End If
Else
MessageBox.Show("Opération annulée par l'utilisateur!", "Ouverture image", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return Nothing
Exit Function
End If
End With
openFD.Dispose()
Return monImage
End Function
#End Region
#Region "MergeImages"
'Fonction résultat(rapidité)
'http://blogs.vbcity.com/xtab/archive/2006/09/21/6213.aspx
Public Sub MergeImages(ByVal Pic1 As Image, ByVal Pic2 As Image) ' As Image
'Calcul de la largeur et la hauteur nécessaire pour l'image composite
If paysage = True Then
Select Case resolution 'orientation paysage
Case 72 '72ppp
Wide = Pic1.Width * 2.5
High = Pic1.Height * 1.275
Decalage = Pic1.Width * 1.275
Case 96 '96ppp
Wide = Pic1.Width * 2
High = Pic1.Height
Decalage = Pic1.Width
Case 180 '180ppp
Wide = Pic1.Width
High = Pic1.Height / 2
Decalage = Pic1.Width / 2
Case 300 '300ppp
Wide = Pic1.Width / 1.6
High = Pic1.Height / 3.2
Decalage = Pic1.Width / 3.2
End Select
Else
Select Case resolution 'orientation portrait
Case 72 '72ppp
High = Pic1.Height * 2.5
Wide = Pic1.Width * 1.275
Decalage = Pic1.Height * 1.275
Case 96 '96ppp
High = Pic1.Height * 2
Wide = Pic1.Width
Decalage = Pic1.Height
Case 180 '180ppp
High = Pic1.Height
Wide = Pic1.Width / 2
Decalage = Pic1.Height / 2
Case 300 '300ppp
High = Pic1.Height / 1.6
Wide = Pic1.Width / 3.2
Decalage = Pic1.Height / 3.2
End Select
End If
'Créer un bitmap vide de la bonne taille à tenir les deux images côte à côte
Dim bm As New Bitmap(CInt(Wide), CInt(High))
'Obtenir l'objet Graphics pour ce bitmap
Dim gr As Graphics = Graphics.FromImage(bm)
'Dessine l'image première source sur le côté gauche de la nouvelle image
gr.DrawImage(Pic1, 0, 0)
If paysage = True Then 'orientation paysage
'Dessine l'image seconde source, le décalage vers le bord droit de l'image de la première source
gr.DrawImage(Pic2, CInt(Decalage), 0)
Else 'orientation portrait
'Dessine l'image seconde source, le décalage vers le bas de l'image de la première source
gr.DrawImage(Pic2, 0, CInt(Decalage))
End If
'Attribuer le bitmap fusionnés que vous venez de créer à l'image; 'vous allez revenir pour l'impression
MergedImage = bm
'sauvegarder l'image
bm.Save(chemin, ImageFormat.Jpeg)
'Ouvrir l'image
' If existe_2 = True Then
Process.Start(chemin)
' End If
'Finir avec l'objet Graphics
gr.Dispose()
gr = Nothing
'Vous avez maintenant une image nommée MergedImage que vous pouvez imprimer.
End Sub
#End Region
End Class

il te reste à faire en sorte que l'on puisse choisir tout type d'image lors de l'ouverture ;)

bonne prog et bonnes fetes poto
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
22 déc. 2011 à 18:23
Je suis bien heureux d'avoir pu re-donner un peu de se que j'ai appris ici, et avec toi ce fut un plaisir;
dés que j'ai du temps je test ta source, passes de bonnes fêtes !
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
22 déc. 2011 à 14:50
ADN56,
c'est un peu grace à toi que j'ai fait ce programme. Tu m'avais encouragé à me séparer de Word dans ma précédente source "Creer calendrier". J'ai donc cherché et trouvé MergeImage. Mais il m'a fallu faire pas mal de transformations. La seconde méthode est pour l'info. Elle est très lente et l'image de sortie est très lourde. A proscrire donc, le seul avantage, ne s'occupe pas de la résolution de l'image. Pour aller un peu plus loin, j'ai fait une mise à jour avec la combination de 4 images.
@+Le pivert
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
21 déc. 2011 à 19:53
tu sites tes sources, tu remercies (à tords pour moi car le code d'ouverture viens de ce site ^^), tu progresses vite. sans tester juste à lire, je te dis : WELL DONE ^^ Bonne continuation ! ça fait plaisir d'aider des programmeurs comme toi ;) kenavo .
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
17 déc. 2011 à 11:05
Bonjour à tous,
Pour ceux qui ne tombe pas sur la dernière mise à jour du 16-12-2011. Cette mise à jour à un zip,une capture d'écran et le code est beaucoup plus intéressant.
Essayez en cliquant sur "Dernières mises à jour"
@+ Le Pivert
Rejoignez-nous