Decouper ou rogner une image [Résolu]

DAN - 12 oct. 2016 à 12:23 - Dernière réponse : DAN247 9 Messages postés samedi 29 octobre 2016Date d'inscription 23 mars 2018 Dernière intervention
- 29 oct. 2016 à 19:29
Bonjour à tous.
Je m'inspire d'un code que j'ai récupéré sur ce site sans me souvenir précisément de son créateur mais il s'agit de :
ImageCroppingDemo
ce code fonctionne bien, il s'agit de découper une partie de l'image pour la récupérer et l'enregistrer.
Malheureusement l'image récupérait reste déformé et tiré et je ne parviens pas à trouver la solution. L'instruction « PreviewPictureBox.SizeMode = PictureBoxSizeMode.Zoom
» ne fonctionne pas dans ce cas

si vous pouviez m'indiquer la méthode pour que la nouvelle image obtenue reste dans les proportions sans aucune déformation je vous en serais vraiment très reconnaissant car je tourne en rond depuis une semaine.
D'avance je vous en remercie.


Voici le code concernant la récupération de la partie découpée de l'image :


Private Sub crobPictureBox_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles crobPictureBox.MouseUp
Try
Cursor = Cursors.Default
Try

If cropWidth < 1 Then
Exit Sub
End If

Dim rect As Rectangle = New Rectangle(cropX, cropY, cropWidth, cropHeight)
Dim bit As Bitmap = New Bitmap(crobPictureBox.Image, crobPictureBox.Width, crobPictureBox.Height)

cropBitmap = New Bitmap(cropWidth, cropHeight)
Dim g As Graphics = Graphics.FromImage(cropBitmap)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel)
'pour ajuster l'image
PreviewPictureBox.SizeMode = PictureBoxSizeMode.Zoom


PreviewPictureBox.Image = cropBitmap

Catch exc As Exception
End Try
Catch exc As Exception
End Try
End Sub
Afficher la suite 

46 réponses

Répondre au sujet
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 12 oct. 2016 à 13:27
Commenter la réponse de cs_Le Pivert
0
Utile
Bonjour pour cette réponse mais ca ne marche pas chez moi
recadr_img.exe est manquant.


Je parviens bien a decouper une partie de ma picture box et la coller dans une seconde picture box mais cette dernière reste déformée étirée....

auriez vous une solution?
Commenter la réponse de DAN
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 13 oct. 2016 à 18:50
0
Utile
recadr_img.exe est manquant.

Toutes les sources sont déposées sans exe, c'est la règle, il suffit d'ouvrir la solution et la compiler!
Commenter la réponse de cs_Le Pivert
0
Utile
3
Merci mais je suis assez novice en la matiere pourriez vous me preciser la marche a suivre,je ne vois pas ou se trouve ce fichier que je dois ouvrir et si je dois le renomer
Excuser mon ignorance
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - 14 oct. 2016 à 00:36
bonsoir
Tu dis que tu t"es inspiré d'un code présent sur le site et que tu l'as même essayé : donc tu manipules un projet sans savoir sur quoi tu agis !
Il serait plus que temps d'apprendre ce qu'est un projet et une solution VB Net, de quels fichiers ceci est constitué ainsi que le rôle de chaque type de fichiers et quelles sont les bases du langage VB Net .
Ensuite tu pourras espérer voler de tes propres ailes sur le chemin de la programmation
Un excellent cours bien qu'il date un peu : http://plasserre.developpez.com/cours/vb-net/
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 14 oct. 2016 à 08:14
Salut vb95, je suis moi même étonné de la question, car voici un post qui date de 2014!

http://codes-sources.commentcamarche.net/forum/affich-10040578-progresbare-qui-bloque
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 14 oct. 2016 à 15:52
un salut amical à cs_Le Pivert
Commenter la réponse de DAN
0
Utile
Bonjour.
Vous êtes un peu sévère avec moi, je programme de façon correcte en m'inspirant parfois du code de de certains.
Sur cette simple petite partie consistant à récupérer une partie de l'image d'une Picture box je n'obtient pas à l'arrivée un résultat correct car cette parcelle reste déformée.
Je ne programme pas régulièrement et j'ai suivi régulièrement un didacticiel visuel basique sur ce site il y a quelques années.
Cela ne fait pas de moi un pro de la programmation VB.
C'est bien pour cela que je m'adresse aux pros de ce site qui pourrait me donner la solution.
J'ajoute qu'étant malvoyant je ne peux pas aller chercher sur le Web
Commenter la réponse de DAN
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 14 oct. 2016 à 10:54
0
Utile
Nous ne sommes pas sévères, mais tu comprendras que ta question peut surprendre de la part d'une personne qui programme en VB.Net
voici le fichier à ouvrir:recad_img


Commenter la réponse de cs_Le Pivert
0
Utile
18
Bonsoir.
J'ai réglé mon problème mais je ne parviens pa a lancer ton appli sous vb.net 2010 ou mémé vb.net 2015
J'ai bien ouvert et visualisé le code mais j'ai le message d'erreur lorse que je veux ouvrir la le désigne ou le lancer.
Je voulais t'envoyer une copie d’écran mais le bouton inserer une image ne me donne pas cette possibilité.

Pourtant je n'ai pas de souci avec le téléchargement des autres codes.....
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 16 oct. 2016 à 17:19
Salut cs_Le Pivert

comme on y est je mets mon code qui ressemble au tien

Imports System.Drawing.Drawing2D

Public Class Form1

Private Xmouse As Integer, YMouse As Integer
Private Xorigine As Integer, Yorigine As Integer
Private cropWidth As Integer, cropHeight As Integer
Private CropPen As Pen

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseDown

If PictureBox1.Image Is Nothing Then Exit Sub
If e.Button = MouseButtons.Left Then
With PictureBox2
.Image = Nothing
.Refresh()
.Visible = False
End With
PictureBox1.Refresh()
cropWidth = 0
cropHeight = 0
Xorigine = e.X
Yorigine = e.Y
Xmouse = e.X
YMouse = e.Y
End If

End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove

With PictureBox1
If .Image Is Nothing Then Exit Sub
If e.Button = MouseButtons.Left Then
.Refresh()
cropWidth = Math.Abs(e.X - Xorigine)
cropHeight = Math.Abs(e.Y - Yorigine)
CropPen = New Pen(Color.Yellow, 1)
If e.X < Xorigine Then Xmouse = e.X
If e.Y < Yorigine Then YMouse = e.Y
'On efface l'ancien rectangle
Dim rect As Rectangle
ControlPaint.DrawReversibleFrame(rect, BackColor, FrameStyle.Thick)
rect = .RectangleToScreen(New Rectangle(Xmouse, YMouse, cropWidth, cropHeight))
.CreateGraphics.DrawRectangle(CropPen, Xmouse, YMouse, cropWidth, cropHeight)
End If
End With

End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseUp

Dim rect As Rectangle, bit As Bitmap
With PictureBox1
If .Image Is Nothing Or cropHeight = 0 Or cropWidth = 0 Then Exit Sub
.CreateGraphics.DrawRectangle(CropPen, Xmouse, YMouse, cropWidth, cropHeight)
rect = New Rectangle(Xmouse, YMouse, cropWidth, cropHeight)
' positions x, y et dimensions largeur, hauteur du rectangle rogné dans la PictureBox1
bit = New Bitmap(.Image, .Width, .Height)
End With
Dim CropImage = New Bitmap(cropWidth, cropHeight) 'dimension du bitmap
Dim g As Graphics = Graphics.FromImage(CropImage)
With g
.InterpolationMode = InterpolationMode.HighQualityBicubic
.PixelOffsetMode = PixelOffsetMode.HighQuality
.CompositingQuality = CompositingQuality.HighQuality
.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel)
End With
With PictureBox2
.Image = CropImage 'affichage dans la PictureBox2 aux dimensions du rectangle rogné
.Width = rect.Width
.Height = rect.Height
.Visible = True
End With

End Sub
End Class


1) je gère le fait que l'on puisse sélectionner le cadre de la nouvelle image en montant ou en allant sur la gauche une fois le MouseDown effectué
2) je ne me sers d'aucun artifice pour étirer l'image : les 2 SizeMode des Picturebox sont sur StretchImage

J'ai toujours ton code du ScreenShot dont je me sers exclusivement pour les captures d'écran : un must en programmation
DAN1 > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 16 oct. 2016 à 21:16
merci pour le code je vais tester ca

voici la totalite de mon code peut etre que tu comprendras mieux que moi

Imports System.Drawing.Drawing2D


Public Class Form1

Dim Yend As Integer
Dim Xend As Integer
Dim Ystart As Integer
Dim Xstart As Integer
Dim cropWidth As Integer
Dim cropHeight As Integer
Dim cropBitmap As Bitmap
Public cropPen As Pen
Public cropPenSize As Integer = 6 'epaisseur du trai de cadre
Public cropDashStyle As Drawing2D.DashStyle = Drawing2D.DashStyle.Solid ' spefie une ligne continue
Public cropPenColor As Color = Color.Yellow 'spefie la couleur du trai
Dim Hpic
Dim Lpic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage

' Dim NOM = "d:\chemin monimage.jpg"
' Dim NOM = "E:\VBNET2012Z4\bin\Debug\DATA\PHOTO\2005.JPG"
Dim NOM = "E:\VBNET2012Z4\bin\Debug\DATA\PHOTO\2009.JPG"
Dim fs As System.IO.FileStream
' Specify a valid picture file path on your computer.
fs = New System.IO.FileStream(NOM, IO.FileMode.Open, IO.FileAccess.Read)
'pour ajuster l'image
PictureBox1.Image = System.Drawing.Image.FromStream(fs)

fs.Close()
fs.Dispose()
fs = Nothing
' PictureBox2.Image = RognImage(PictureBox1.Image, 900, 900, 400, 400)

'vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
Lpic = PictureBox2.Width
Lpic = PictureBox2.Height

'= New Bitmap(PictureBox1.Image, PictureBox1.Width, PictureBox1.Height)
cropBitmap = New Bitmap(15000, 600)
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
' dessiner cadre
Dim graph As Graphics = Graphics.FromImage(cropBitmap)
Dim rect As New Rectangle(0, 0, cropWidth, cropHeight)
cropPen = New Pen(cropPenColor, cropPenSize)

PictureBox1.CreateGraphics.DrawRectangle(cropPen, 10, 10, 20, 20)
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

PictureBox2.Image = (cropBitmap)
' PictureBox2.Height = PictureBox2.Height
' PictureBox2.Width = PictureBox2.Width / 2
Exit Sub

End Sub
Private Function RognImage(ByVal ImaSource As Bitmap, ByVal xPixelDep As Int32, ByVal yPixelDep As Int32, ByVal xPixelTotal As Int32, ByVal yPixelTotal As Int32) As Bitmap

'ByVal ImaSource As Bitmap est l'objet image source. C'est l'image source de départ qui doit être rogner.
'ByVal xPixelDep As Int32 et ByVal yPixelDep As Int32 indique les coordonnées x et y du pixel de départ à
'partir duquel on doit rogner.
'ByVal xPixelTotal As Int32 indique le nombre de pixel à conserver sur l'axe de coordonnée x
'(ou le Widht que devra avoir la nouvel image), ByVal yPixelTotal As Int32 indique le nombre
'de pixel à conserver sur l'axe de coordonnée y (ou le Height que devra avoir la nouvel image)
'
'Exemple 1, supposons que votre PictureBox1 contient une image avec un width de 200 pixels et un height
'de 100 pixels et que vous souhaiter rogner et garder au final que la moitiée supérieure de votre image.
'Vous appelerez la fonction RognImage comme suit:
'
'PictureBox1.Image= RognImage(PictureBox1.Image, 0, 0, 200, 50)

'Exemple 2, supposons que votre PictureBox1 contient une image avec un width de 350 pixels et un height
'de 400 pixels et que vous souhaiter rogner et garder au final que la moitiée inférieure de votre image.
'Vous appelerez la fonction RognImage comme suit:
'
'PictureBox1.Image= RognImage(PictureBox1.Image, 0, 200, 350, 200)

'ATTENTION: Pour le rendu final de votre control PictureBox, souvenez vous que la propriété SizeMode
'influence la manière dont le controle et son contenu image est dessiné. Garder à l'esprit que le rognage
's effectue sur l'objet image contenu dans le PictureBox et non sur le contrôle PictureBox lui même.
'
'Vous pouvez appliquer la fonction à tout objet image et pas seulement au contrôle PictureBox.

Dim nouvImage As New Bitmap(xPixelTotal, yPixelTotal)
Dim graph As Graphics = Graphics.FromImage(nouvImage)
Dim rect As New Rectangle(0, 0, xPixelTotal, yPixelTotal)
graph.DrawImage(ImaSource, rect, xPixelDep, yPixelDep, xPixelTotal, yPixelTotal, GraphicsUnit.Pixel)
Return nouvImage

End Function




Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown


' Try

If PictureBox1.Image Is Nothing Then Exit Sub

If e.Button = Windows.Forms.MouseButtons.Left Then


PictureBox1.Refresh()

Xstart = e.X
Ystart = e.Y
End If

' Catch exc As Exception



' End Try

End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If PictureBox1.Image Is Nothing Then Exit Sub

If e.Button = Windows.Forms.MouseButtons.Left Then
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage


PictureBox1.Refresh()
Yend = e.Y
Xend = e.X

cropWidth = Math.Abs(e.X - Xstart)
cropHeight = Math.Abs(e.Y - Ystart)
cropPen = New Pen(cropPenColor, cropPenSize)
cropPen = New Pen(cropPenColor, cropPenSize)

' PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)

'On efface l'ancien rectangle
Dim rect As Rectangle
ControlPaint.DrawReversibleFrame(rect, Me.BackColor, FrameStyle.Thick)
rect = PictureBox1.RectangleToScreen(New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart))

PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)

End If

End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp

PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)
Dim rect As Rectangle = New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart)
' positions x, y et dimensions largeur, hauteur du rectangle rogné dans la PictureBox1
Dim bit As Bitmap = New Bitmap(PictureBox1.Image, PictureBox1.Width, PictureBox1.Height)
Dim CropImage = New Bitmap(cropWidth, cropHeight) 'dimension du bitmap
Dim g As Graphics = Graphics.FromImage(CropImage)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel)
PictureBox2.Height = CInt(rect.Height)


PictureBox2.Image = CropImage 'affichage dans la PictureBox2 aux dimensions du rectangle rogné
PictureBox2.Width = CInt(rect.Width)
PictureBox2.Height = CInt(rect.Height)
'PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
PictureBox2.SizeMode = PictureBoxSizeMode.Zoom
CropImage.Save("D:\chemin monimage.jpg", Imaging.ImageFormat.Jpeg) 'adapter le chemin d'enregistrement

End Sub

End Class
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention > DAN1 - 16 oct. 2016 à 22:02
Salut Dan
1) L'épaisseur du trait du cadre doit être à 1 sinon tu perds des détails sur les bords de l'image
2) Le chargement de la picturebox par un fileStream est incorrect :Le fichier image sur ton disque dur contient bien l'image mais d'autres choses ( son type : .bmp ou .jpg, une entête spécifique selon son type, etc ....) . Dans ton cas ta Picturebox contient bien l'image mais ces autres choses parasites aussi
Le code correct st tout simplement
Picturebox.Image = Image.FromFile(fichier)
où fichier est le nom complet du fichier image
3) Utilise mon code avec 2 PictureBox . Tu sélectionnes à la souris le
cadre que tu veux extraire
DAN1 > vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - 16 oct. 2016 à 22:32
Bonsoir.
J'ai de suite mis en test des conseils mais rien ne change sur la photo obtenue.
J'ai mis les deux pictures en mode StretchImage
.
J'ai également mis ma photo dans picturebox1 de la façon suivante
PictureBox1.Image = Image.FromFile(NOM)

À l'arrivée j'ai remis les deux picture en mode zoom mais seul la photo d'origine reprend son apparence normale, la photo résultat reste étirée.
Si au démarrage les deux Picture sont en mode zoom à l'arrivée la photo obtenue reste étirée comme si elle était en mode StretchImage

Je pense que le mode StretchImage n'est pas la bonne solution et qu'il faudrait pouvoir recalculer la hauteur et la largeur de la photo obtenue.
Les dimensions du cadre ne suffisent pas à rétablir la dimension correcte.
As-tu une autre idée ?
Merci en tout cas de m'aider avec autant de constance et de volonté cela me touche beaucoup.
DAN1 > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 16 oct. 2016 à 21:47
Bonsoir le pivert.
Je repris ton code et remis ma photo dans picturebox1v en recréant form1_load pour insérer la photo (il s'agit de ma petite fille) dans la création de la nouvelle photo tu as prévu et détection des erreurs et effectivement j'ai l'erreur suivante :
une erreur generique s'est produite dans CDI+

la photo obtenue de visu dans Picturebox2est toujours déformé.
Je me suis rendu compte par ailleurs que je ne peux plus me connecter sur VB France avec mon pseudo et mon mot de passe que je n'avais pas utilisée depuis très longtemps donc je vais certainement recréer un nouveau pseudo nouveau mot de passe pour tenter de t'envoyer des copies d'écran.
Merci en tout cas de tout ce que tu tentes de faire pour m'aider et j'en suis sincèrement touché.
une erreur s'est produite dans CDI
Commenter la réponse de Dan1
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - Modifié par cs_Le Pivert le 16/10/2016 à 18:07
0
Utile
Bravo vb95, le résultat est conforme à la sélection, voir la mire à ouvrir dans le programme:


télécharger sur le net: code barre, très utile!

merci,c'est vrai le programme dont tu parles est fait sur la base du programme que DAN1 n'arrive pas à faire fonctionner, c'est dommage car là tu as un rectangle de sélection réglable comme les logiciel de pro.

Bonne soirèe
@+ Le Pivert
Commenter la réponse de cs_Le Pivert
0
Utile
Bonsoir.
Je pense que l'option StretchImage ne peut convenir car
L'image contenue dans la PictureBox est étirée ou rétrécie pour correspondre à la taille de la PictureBox..
Il faudrait pouvoir utiliser l'option zoom et obtenir en sortie une image correspondant à la sélection avec également une option zoom.
Le problème est forcément la et je ne sais toujours pas comment procéder.
Il faudrait pouvoir recalculer la hauteur et la largeur de la nouvelle image mais celle mémorisée dans le cadre n'est pas correcte non plus…

qu'en penses-tu ?
PS : je vais être obligé de recréer un nouveau pseudo et un nouveau mot de passe car celui que j'avais précédemment ne semble plus fonctionner car je ne l'ai pas utilisé depuis très longtemps.
Commenter la réponse de DAN1
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - Modifié par vb95 le 17/10/2016 à 01:22
0
Utile
8
Salut Dan
Je crois avoir trouvé
Utilises ce code S.V.P et uniquement celui-ci

Imports System.Drawing.Drawing2D

Public Class Form1

Dim Yend As Integer
Dim Xend As Integer
Dim Ystart As Integer
Dim Xstart As Integer
Dim cropWidth As Integer
Dim cropHeight As Integer
Dim cropBitmap As Bitmap
Public cropPen As Pen
Public cropPenSize As Integer = 1 'epaisseur du trait de cadre
Public cropDashStyle As Drawing2D.DashStyle = Drawing2D.DashStyle.Solid ' spefie une ligne continue
Public cropPenColor As Color = Color.Yellow 'specifie la couleur du trait

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
PictureBox2.SizeMode = PictureBoxSizeMode.Normal
PictureBox2.Visible = False
Dim nomfich As String = "D:\Capture.jpg" ' fichier image à charger
PictureBox1.Image = Image.FromFile(nomfich)

End Sub

Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown

If PictureBox1.Image Is Nothing Then Exit Sub
If e.Button = MouseButtons.Left Then
PictureBox1.Refresh()
PictureBox2.Visible = False
Xstart = e.X
Ystart = e.Y
End If

End Sub

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove

If PictureBox1.Image Is Nothing Then Exit Sub
If e.Button = MouseButtons.Left Then
PictureBox1.Refresh()
Yend = e.Y
Xend = e.X
cropWidth = Math.Abs(e.X - Xstart)
cropHeight = Math.Abs(e.Y - Ystart)
cropPen = New Pen(cropPenColor, cropPenSize)
'On efface l'ancien rectangle
Dim rect As Rectangle
ControlPaint.DrawReversibleFrame(rect, Me.BackColor, FrameStyle.Thick)
rect = PictureBox1.RectangleToScreen(New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart))
PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)
End If

End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp

If PictureBox1.Image Is Nothing Then Exit Sub
If cropHeight = 0 Or cropWidth = 0 Then Exit Sub
PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)
Dim rect As Rectangle = New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart)
' positions x, y et dimensions largeur, hauteur du rectangle rogné dans la PictureBox1
Dim bit As Bitmap = New Bitmap(PictureBox1.Image, PictureBox1.Width, PictureBox1.Height)
Dim CropImage = New Bitmap(cropWidth, cropHeight) 'dimension du bitmap
Dim g As Graphics = Graphics.FromImage(CropImage)
g.InterpolationMode = InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = PixelOffsetMode.HighQuality
g.CompositingQuality = CompositingQuality.HighQuality
g.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel)
PictureBox2.Height = rect.Height
PictureBox2.Width = rect.Width
PictureBox2.Image = CropImage 'affichage dans la PictureBox2 aux dimensions du rectangle rogné
PictureBox2.Visible = True

End Sub

End Class


Deux modifications ont été faites
1) Le SizeMode de PictureBox1 est sur Autosize et non sur StretchImage ce qui fait que PictureBox1 s'adapte automatiquement aux dimensions du fichier image stocké sur le disque : donc plus d'image étirée ou rétrécie normalement .
2) Par contre pour Picturebox2 on passe ce paramètre à Normal

Remplace le nom du fichier Image que moi j'ai mis par le nom de ton fichier Image
Dis nous ce qu'il est est
A +
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 17 oct. 2016 à 11:25
On est en train de tourner en rond. Voici le programme indiqué au départ avec l'exe. Tu télécharges, tu dezippes et ensuite tu vas dans le dossier Debug et tu cliques sur le fichier: recad_img avec l'icone en forme de ciseaux.
Là tu auras ce que tu veux, car les proportions sont prises en compte, grâce à la class clsRegion qui gère tout.

http://www.cjoint.com/c/FJrjugYdgrQ

Bon courage

@+ Le Pivert
DAN1 > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 17 oct. 2016 à 18:38
Bonsoir.
Je pense avoir trouvé la solution, cela marche maintenant chez moi avec quelques petites corrections à faire par la suite.
J'ai ajouté trois petits contrôles, un pour lire la photo une seconde pour l'enregistrer une troisième pour effacer.
Voici mon code.
Imports System.Drawing.Drawing2D

Public Class Form1
Dim Monimage, Monimage_mini As System.Drawing.Image
Dim fichier_image As String
Dim Yend As Integer
Dim Xend As Integer
Dim Ystart As Integer
Dim Xstart As Integer
Dim cropWidth As Integer
Dim cropHeight As Integer
Dim cropBitmap As Bitmap
Public cropPen As Pen
Public cropPenSize As Integer = 2 'epaisseur du trai de cadre
Public cropDashStyle As Drawing2D.DashStyle = Drawing2D.DashStyle.Solid ' spefie une ligne continue
Public cropPenColor As Color = Color.Yellow 'spefie la couleur du trai
Dim Hpic
Dim pbL, pbH, pbTop, pbLeft As Integer
Dim rect As Rectangle
Dim Lpic
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Exit Sub
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
PictureBox2.SizeMode = PictureBoxSizeMode.Zoom

' Dim NOM = "d:\chemin monimage.jpg"
' Dim NOM = "E:\VBNET2012Z4\bin\Debug\DATA\PHOTO\2005.JPG"

Dim NOM = "E:\VBNET2012Z4\bin\Debug\DATA\PHOTO\2009.JPG"
Monimage = System.Drawing.Bitmap.FromFile(NOM)


Dim fs As System.IO.FileStream
' Specify a valid picture file path on your computer.
fs = New System.IO.FileStream(NOM, IO.FileMode.Open, IO.FileAccess.Read)
'pour ajuster l'image
PictureBox1.Image = System.Drawing.Image.FromStream(fs)

fs.Close()
fs.Dispose()
fs = Nothing
' PictureBox2.Image = RognImage(PictureBox1.Image, 900, 900, 400, 400)

'vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
Lpic = PictureBox2.Width
Lpic = PictureBox2.Height

'= New Bitmap(PictureBox1.Image, PictureBox1.Width, PictureBox1.Height)
cropBitmap = New Bitmap(15000, 600)
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
' dessiner cadre
Dim graph As Graphics = Graphics.FromImage(cropBitmap)
Dim rect As New Rectangle(0, 0, cropWidth, cropHeight)
cropPen = New Pen(cropPenColor, cropPenSize)

PictureBox1.CreateGraphics.DrawRectangle(cropPen, 10, 10, 20, 20)
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

PictureBox2.Image = (cropBitmap)
' PictureBox2.Height = PictureBox2.Height
' PictureBox2.Width = PictureBox2.Width / 2
Exit Sub

End Sub
Private Function RognImage(ByVal ImaSource As Bitmap, ByVal xPixelDep As Int32, ByVal yPixelDep As Int32, ByVal xPixelTotal As Int32, ByVal yPixelTotal As Int32) As Bitmap


'ATTENTION: Pour le rendu final de votre control PictureBox, souvenez vous que la propriété SizeMode
'influence la manière dont le controle et son contenu image est dessiné. Garder à l'esprit que le rognage
's effectue sur l'objet image contenu dans le PictureBox et non sur le contrôle PictureBox lui même.
'
'Vous pouvez appliquer la fonction à tout objet image et pas seulement au contrôle PictureBox.

Dim nouvImage As New Bitmap(xPixelTotal, yPixelTotal)
Dim graph As Graphics = Graphics.FromImage(nouvImage)
Dim rect As New Rectangle(0, 0, xPixelTotal, yPixelTotal)
graph.DrawImage(ImaSource, rect, xPixelDep, yPixelDep, xPixelTotal, yPixelTotal, GraphicsUnit.Pixel)
Return nouvImage

End Function




Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
'If PictureBox1.Image Is Nothing Then Exit Sub
' If e.Button = Windows.Forms.MouseButtons.Left Then
PictureBox1.Refresh()
Xstart = e.X
Ystart = e.Y
End If
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If PictureBox1.Image Is Nothing Then Exit Sub

If e.Button = Windows.Forms.MouseButtons.Left Then


PictureBox1.Refresh()
Yend = e.Y
Xend = e.X

cropWidth = Math.Abs(e.X - Xstart)
cropHeight = Math.Abs(e.Y - Ystart)
cropPen = New Pen(cropPenColor, cropPenSize)
' PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)

'On efface l'ancien rectangle

' ControlPaint.DrawReversibleFrame(rect, Me.BackColor, FrameStyle.Thick)
rect = PictureBox1.RectangleToScreen(New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart))

PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)

End If

End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp

PictureBox1.CreateGraphics.DrawRectangle(cropPen, Xstart, Ystart, cropWidth, cropHeight)
Dim rect As Rectangle = New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart)
' positions x, y et dimensions largeur, hauteur du rectangle rogné dans la PictureBox1
Dim bit As Bitmap = New Bitmap(PictureBox1.Image, PictureBox1.Width, PictureBox1.Height)
Dim CropImage = New Bitmap(cropWidth, cropHeight) 'dimension du bitmap
Dim g As Graphics = Graphics.FromImage(CropImage)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel)


PictureBox2.Image = CropImage 'affichage dans la PictureBox2 aux dimensions du rectangle rogné

Dim rapportX, rapportY As Double
rapportX = Monimage.Width / PictureBox1.Width
rapportY = Monimage.Height / PictureBox1.Height



PictureBox2.Image = RecadreImage(PictureBox1.Image, IIf(Xend > Xstart, Xstart, Xend) * rapportX, IIf(Yend > Ystart, Ystart, _
Yend) * rapportY, Math.Abs(Xend - Xstart) * rapportX, Math.Abs(Yend - Ystart) * rapportY)
PictureBox2.SizeMode = PictureBoxSizeMode.Zoom
Dim L = PictureBox2.Width
Dim H = PictureBox2.Height
If L > H Then
PictureBox2.Width = pbL
PictureBox2.Height = (pbL / L) * H
Else
PictureBox2.Width = (pbH / H) * L
PictureBox2.Height = pbH
End If
End Sub
Private Function RecadreImage(ByVal ImaSource As Bitmap, ByVal xPixelDep As Int32, ByVal yPixelDep As Int32, ByVal xPixelTotal As Int32, ByVal yPixelTotal As Int32) As Bitmap
Dim nouvImage As New Bitmap(xPixelTotal, yPixelTotal)
Dim graph As Graphics = Graphics.FromImage(nouvImage)
Dim rect As New Rectangle(0, 0, xPixelTotal, yPixelTotal)
graph.DrawImage(ImaSource, rect, xPixelDep, yPixelDep, xPixelTotal, yPixelTotal, GraphicsUnit.Pixel)
Return nouvImage

End Function


Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim openDlg As New System.Windows.Forms.OpenFileDialog
openDlg.Filter = "JPEG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif|Bitmap Files (*.bmp)|*.bmp"
If openDlg.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
Exit Sub
End If
If Not openDlg.FileName Is Nothing Then
' PreviewPictureBox.Image = System.Drawing.Bitmap.FromFile(openDlg.FileName)
' crobPictureBox.Image = System.Drawing.Bitmap.FromFile(openDlg.FileName)

Dim nom = openDlg.FileName
Monimage = System.Drawing.Bitmap.FromFile(nom)

Dim fs As System.IO.FileStream
' Specify a valid picture file path on your computer.
fs = New System.IO.FileStream(nom, IO.FileMode.Open, IO.FileAccess.Read)
'pour ajuster l'image
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
PictureBox1.Image = System.Drawing.Image.FromStream(fs)
fs.Close()
fs.Dispose()
fs = Nothing
pbL = PictureBox1.Width
pbH = PictureBox1.Height


End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cropSaveBtn.Click
Dim tempFileName As String
Dim svdlg As New SaveFileDialog()
svdlg.Filter = "JPEG files (*.jpg)|*.jpg|All files (*.*)|*.*"
svdlg.FilterIndex = 1
svdlg.RestoreDirectory = True
If svdlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
tempFileName = svdlg.FileName 'check the file exist else save the cropped image
Try
Dim img As Image = PictureBox2.Image

SavePhoto(img, tempFileName, 225)
Catch exc As Exception
MsgBox("Error on Saving: " & exc.Message)
End Try
End If
End Sub

Private Sub cropCancelBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cropCancelBtn1.Click
PictureBox2.Image = Nothing
cropBitmap = Nothing
PictureBox1.Image = Nothing
End Sub
Public Function SavePhoto(ByVal src As Image, ByVal dest As String, ByVal w As Integer) As Boolean
Try
Dim imgTmp As System.Drawing.Image
Dim imgFoto As System.Drawing.Bitmap

imgTmp = src
imgFoto = New System.Drawing.Bitmap(w, 225)
Dim recDest As New Rectangle(0, 0, w, imgFoto.Height)
Dim gphCrop As Graphics = Graphics.FromImage(imgFoto)
gphCrop.SmoothingMode = SmoothingMode.HighQuality
gphCrop.CompositingQuality = CompositingQuality.HighQuality
gphCrop.InterpolationMode = InterpolationMode.High

gphCrop.DrawImage(imgTmp, recDest, 0, 0, imgTmp.Width, imgTmp.Height, GraphicsUnit.Pixel)

Dim myEncoder As System.Drawing.Imaging.Encoder
Dim myEncoderParameter As System.Drawing.Imaging.EncoderParameter
Dim myEncoderParameters As System.Drawing.Imaging.EncoderParameters

Dim arrayICI() As System.Drawing.Imaging.ImageCodecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
Dim jpegICI As System.Drawing.Imaging.ImageCodecInfo = Nothing
Dim x As Integer = 0
For x = 0 To arrayICI.Length - 1
If (arrayICI(x).FormatDescription.Equals("JPEG")) Then
jpegICI = arrayICI(x)
Exit For
End If
Next
myEncoder = System.Drawing.Imaging.Encoder.Quality
myEncoderParameters = New System.Drawing.Imaging.EncoderParameters(1)
myEncoderParameter = New System.Drawing.Imaging.EncoderParameter(myEncoder, 60L)
myEncoderParameters.Param(0) = myEncoderParameter
imgFoto.Save(dest, jpegICI, myEncoderParameters)
imgFoto.Dispose()
imgTmp.Dispose()

Catch ex As Exception

End Try
End Function
End Class
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention > DAN1 - 17 oct. 2016 à 19:00
Salut Dan
Va voir ici : http://codes-sources.commentcamarche.net/source/101665-selection-d-un-morceau-d-une-image-bitmap
En beaucoup plus simple
Je n'ai pas fait l'enregistrement de l'image résultante
DAN1 > vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - 17 oct. 2016 à 19:34
Bravo !
C'est parfait beaucoup mieux que ce que j'avais trouvé, je vais regarder de près le code mais ya rien à dire sur le résultat.
A+.
Dan
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention > DAN1 - 17 oct. 2016 à 20:37
Salut Dan1
si ton problème est résolu peux-tu fermer ce post ?
tout en haut "Marquer comme Résolu" : tu cliques dedans
Merci pour l'appréciation
Commenter la réponse de vb95
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - Modifié par cs_Le Pivert le 17/10/2016 à 08:31
0
Utile
3
vb95, je suis désolé mais cela ne va pas du tout.La mouture précédente fonctionne nettement mieux

http://codes-sources.commentcamarche.net/forum/affich-10069723-decouper-ou-rogner-une-image#24

J'ai fait un essai avec une image en mode portrait, on ne voit pas la totalité de l'image. j'ai donc mis cela pour voir la totalité de l'image:

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage
        PictureBox2.Visible = False
        Dim nomfich As String = "C:\chemin image.jpg" ' fichier image à charger
        PictureBox1.Image = Image.FromFile(nomfich)
        PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
        Me.Width = PictureBox1.Width
        Me.Height = PictureBox1.Height
    End Sub


Le problème vient de l'affichage de la PictureBox2 qui se trouve sur la PictureBox1, et il en manque suivant la position de la sélection.

Reste avec le précédent code qui fonctionne très bien!!

Cdlt

PS on ne s'y retrouve pas dans les posts, c'est un véritable foutoir
@+ Le Pivert
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - 17 oct. 2016 à 11:44
Salut cs_Le Pivert
Je comprends ce que tu veux dire : Picturebox1 et Picturebox2 se chevauchent
L'idéal serait de travailler avec 2 forms : une pour Picturebox1 et l'autre pour PictureBox2 ( cette dernière étant la Form Résultat si on peut dire)
Ou se servir de ton ScreenShot encore mieux

Par contre si on prend mon premier code Picturebox1 ne prend pas automatiquement les mêmes dimensions que l'image réelle ce qui fait qu'elle est soit rétrécie soit étirée : c'est cela que notre ami Dan avait tant de mal à nous expliquer
Bonne journée à toi
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention > vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - 17 oct. 2016 à 11:50
Je lui est donné un lien pour télécharger mon programme avec l'exe. J'espère que cela le satisfera. Je pense qu'avec les codes développés sur ce post on n'arrivera pas à ce qu'il désire. Puisque tu as le programme Screenshot regarde la class clsRegion comme les proportions sont prisent en compte.

Bonne journée

@+ Le Pivert
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 17 oct. 2016 à 12:55
Merci cs_Le Pivert
Je connais très bien ton projet : c'est d'ailleurs de celui-ci que je me sers depuis plus d'un an ( pas trouver mieux en open source)
J'ai testé avec une seule Form et un Panel invisible contenant la PictureBox résultante
Une fois le cadre de PictureBox1 sélectionné au MouseUp de PictureBox1 j'affiche mon Panel contenant PictureBox2
Aucun souci de chevauchement d'image et plus d'image étirée ou rétrécie au chargement de Picturebox1
A la prochaine avec plaisir
Commenter la réponse de cs_Le Pivert
0
Utile
1
Salut à vous deux.
J'ai finalement trouvé la solution à tous mes problèmes car les dernières propositions ne marchaient pas sur des images de taille dépassant celle de l'écran.
J'ai donc cherché une solution et je l'ai trouvé.
J'aimerais maintenant poster ce code pour qu'il puisse être disponible par d'autres personnes mais impossibles de comprendre la marche à suivre.
J'aurais voulu vous joindre ici tout au moins mon exe pour que vous puissiez le tester mais encore une fois impossible de trouver le moyen d'ajouter cet exe.
Merci de m'indiquer la marche à suivre à moins que je ne sois obligé de créer une nouvelle inscription.
A+.
Dan
vb95 1505 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 22 avril 2018 Dernière intervention - 29 oct. 2016 à 18:15
Bonjour Dan1
Tu es inscrit sur le site comme "Visiteur anonyme"
Pour déposer une source il faut s'inscrire comme membre ; Cela t'est proposé dès l'entrée sur le site
Un fois ceci fait reste à déposer la source
1) il faut compresser le répertoire qui contient tout ton projet en.zip . Un projet appelé "Toto" donnera un fichier .zip appelé toto.zip . Zipper un fichier c'est le compresser avec Winzip ou tout autre logiciel gérant le format .zip ( avec compression normale)
Pour un projet on zippe le répertoire entier contenant le projet
Une chose à faire avant de zipper c'est de supprimer les répertoires .Bin et .Debug dans le projet : ils contiennent des exécutables du projet et on ne les mets pas dans une source sur le site.
Une fois ceci fait tu peux déposer une source
On te demandera de choisir le langage, la catégorie de projet (jeux, fichiers-disques, base de données dans une liste disponible)
Ensuite reste plus à mettre le fichier .zip sur le site et à enregistrer

tu peux mettre une description de ce que fait ton projet et même tu peux mettre une image de ton projet sur le site

Pour plus de détails je te renvoie là : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche et principalement à l'onglet "Publier une contribution"
bon week-end à toi
Commenter la réponse de DAN1
DAN247 9 Messages postés samedi 29 octobre 2016Date d'inscription 23 mars 2018 Dernière intervention - 29 oct. 2016 à 19:29
0
Utile
Bonjour.
Merci de ton message.
J'ai donc fait une nouvelle inscription sous le pseudo Dan247.
J'ai déposé mon projet concernant le découpage d'une image et je serai très heureux de recueillir votre avis sur ce résultat.
Quelque soit la taille de l'image elle peut apparaître en totalité à l'écran et l'on peut récupérer n'importe quelle partie de cette image et l'enregistrer.
Grand merci pour votre aide en tout cas.
Dan247
Commenter la réponse de DAN247

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.