[VB.NET] Convertir Tableau Byte[] en image
Bonjour,
Tout d'abord pour expliquer le contexte: je cherche à enregistrer des images (peu importe le format) dans une base SQL Express 2005 et je veux ensuite récupérer l'image pour l'afficher sur ma Form. J'ai donc déclaré un champ de type "VarBinary(MAX)" dans ma table pour contenir l'image (Le champ de type "Image" est obsolète et va disparaitre dans SQL 2008, j'ai donc péféré prendre les devant).
Dans mon code voici les fonctions que j'ai créé:
Je convertis l'image en tableau de byte pour l'enregistrement en base:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Public Shared Function ConvertImageToByteArray(ByVal imageToConvert As Image, ByVal formatOfImage As Imaging.ImageFormat) As Byte()
Try
Dim ms As New MemoryStream
imageToConvert.Save(ms, formatOfImage)
Return (ms.ToArray)
Catch ex As Exception
Return Nothing
End Try
End Function |
Ensuite je formate ma chaine SQL pour l'enregistrement en base:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Public Shared Function FormatModify(ByVal champ As Byte()) As String
Dim ret As String
If champ Is Nothing Then
ret = "NULL"
Else
ret = String.Concat("CONVERT(varbinary(max),'", BitConverter.ToString(champ), "',1)")
End If
Return ret
End Function |
L'enregistrement dans la table SQL semble se passer correctement, j'ai bien des données dans mon champ après la création de l'enregistrement.
C'est la manipulation inverse qui pose problème.
Je convertis la valeur de mon champ en tableau de Byte (C'est ici qu'il semble qu'il y ai un problème):
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Public Shared Sub GetValue(ByVal field As Object, ByRef dbData As Byte())
Dim conversion As Encoding = Encoding.Unicode
If field.Equals(DBNull.Value) Then
dbData = Nothing
Else
dbData = conversion.GetBytes(BitConverter.ToString(CType(field, Byte())))
'dbData = CType(field, Byte())
End If
End Sub |
Je convertis le tableau de Byte récupéré en Image à l'aide d'un stream:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
Public Shared Function ConvertByteArrayToImage(ByVal tableau As Byte()) As Image
Try
Dim newImage As Image
Dim ms As New MemoryStream(tableau)
ms.Write(tableau, 0, tableau.Length)
newImage = Image.FromStream(ms)
Return newImage
Catch ex As Exception
Return Nothing
End Try
End Function |
Et cette dernière fonction plante sur le "ms.Write" avec le message d'erreur: "Paramètre non valide".
Est-ce que quelqu'un aurait une idée ou une autre méthode à ma poposer?
Merci d'avance.
conversion un tableau de byte en image dans compact framework
Salut
Comment je peux trnsformer un tableau de byte à une image dans compact framework, sachant que j'applique mon logiciel un un pda pocket pc 2003.
J'ai utilisé les instructions suivantes :
Code:
1 2 3
| System.IO.MemoryStream ms = new System.IO.MemoryStream(montableau);
Image hh = new Bitmap(ms);
pictureBox2.Image = hh; |
mais une exception est généré lors de l'exécution de l'instruction : Image hh = new Bitmap(ms) , qui dis," la valeur n'est pas comprise dans la plage attendue".
pourtant, les valeurs de mon tableau est comprise entre 0 et 255.
Merci