Erreur enregistrement image après modif

Résolu
Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009 - 26 nov. 2008 à 03:41
Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009 - 26 nov. 2008 à 13:54
Voici mon code :

  Dim Picture As Drawing.Bitmap = Drawing.Bitmap.FromFile("C:\Users\Redman\Desktop\aaa.jpg")
                Dim TemporaryPicture As Drawing.Bitmap = Picture.Clone
                Picture.Dispose()
                Dim X As Integer = 916
                Dim Y As Integer = 258
                Dim Width As Integer = 321
                Dim Height As Integer = 241
                Dim FinalPicture As New Drawing.Bitmap(Width, Height, TemporaryPicture.PixelFormat)

                For xi As Integer = X To X + Width - 1
                    For xy As Integer = Y To Y + Height - 1
                        FinalPicture.SetPixel(xi - X, xy - Y, TemporaryPicture.GetPixel(xi, xy))
                    Next
                Next

                FinalPicture.Save("C:\Users\Redman\Desktop\aaa.jpg")

Le programme lève une exception à : FinalPicture.Save("C:\Users\Redman\Desktop\aaa.jpg")
Voici l'erreur :

L'exception System.Runtime.InteropServices.ExternalException n'a pas été gérée
  ErrorCode=-2147467259
  Message="Une erreur générique s'est produite dans GDI+."

Comment y remédier ?

Merci d'avance :D

Redman

4 réponses

jmenfous Messages postés 117 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 2 juillet 2009 1
26 nov. 2008 à 09:17
Pardon, l'éditeur de texte du forum ne semble pas aimer Opera don je te refais le code proprement avec les retours à la ligne:

Je n'ai malheureusement pas put tester ton code (soucis de taille
d'image dans la boucle for) Par contre je pense que ton souci provien
d'une impossiblité d'enregistrer ton image car elle est déjà ouverte
(souci plsu fréquent qu'il n'y parait)

Je te coneillerai plutôt
d'utiliser un code du genre :

' Chargement de l'image à dessiner
Dim
path as String = "...path vers ton image..."
Dim fs As New
System.IO.StreamReader(path)
Dim image As Image =
image.FromStream(fs.BaseStream)
fs.Close()
fs.Dispose()
fs = Nothing

'
Création du bitmap pour réaliser le dessin
Dim bmp As New
Bitmap(image.Width, image.Height)

' Création du graphics pour dessiner
Dim g As Graphics = Graphics.FromImage(bmp)

' On dessine l'image
' (ce
n'est qu'un exemple à adapter en focntion de ce que tu veux faire de
ton image) g.DrawImage(image, 0, 0)

' Sauvagarde
bmp.Save(path,
System.Drawing.Imaging.ImageFormat.Jpeg)

C'est tout de même plus lisible comem ça

Jérémy Jeanson MCP
3
jmenfous Messages postés 117 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 2 juillet 2009 1
26 nov. 2008 à 09:11
Je n'ai malheureusement pas put tester ton code (soucis de taille d'image dans la boucle for)

Par contre je pense que ton souci provien d'une impossiblité d'enregistrer ton image car elle est déjà ouverte (souci plsu fréquent qu'il n'y parait)

Je te coneillerai plutôt d'utiliser un code du genre :

' Chargement de l'image à dessiner
Dim path as String = "...path vers ton iamge..."
Dim fs As New System.IO.StreamReader(path)
Dim image As Image = image.FromStream(fs.BaseStream)
fs.Close()
fs.Dispose()
fs = Nothing

' Création du bitmap pour réaliser le dessin
Dim bmp As New Bitmap(image.Width, image.Height)

' Création du graphics pour dessiner
Dim g As Graphics = Graphics.FromImage(bmp)

' On dessine l'image (ce n'est qu'un exemple à adapter en focntion de ce que tu veux faire de ton image)
g.DrawImage(image, 0, 0)

' Sauvagarde
bmp.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg)

Jérémy Jeanson MCP
0
Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009
26 nov. 2008 à 13:42
Bah moi j'avais appris sur un livre de programmation VB.Net a utiliser Image.Clone dans une autre image donc ca copie sans utiliser le stream et ensuite Image.Dispose. Et là ça ne marche pas. Je vais essayer comme tu dis.

Par contre j'arrive pas avec g.DrawImageUnscaledAndClipped(Picture, New Drawing.Rectangle(X, Y, Width, Height)) ca ne sélectionne pas le rectangle de l'image que je veux importer dans la nouvelle image. Ca fait une image toute noire.

Redman
0
Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009
26 nov. 2008 à 13:54
J'ai réussi à ma façon avec les 2 boucles que j'avais fait.

Merci

Redman
0
Rejoignez-nous