cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 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és1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 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és1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 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és7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 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és1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 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és7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 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
24 déc. 2011 à 11:32
Bonne fêtes de fin d'année.
@+ Le Pivert
22 déc. 2011 à 19:20
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
22 déc. 2011 à 18:23
dés que j'ai du temps je test ta source, passes de bonnes fêtes !
22 déc. 2011 à 14:50
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
21 déc. 2011 à 19:53
17 déc. 2011 à 11:05
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