Bonjour.
J'ai plusieurs images (dans un tableau d'objets image) que je veux ajouter
dans un seul (en utilisant le format TIFF).
Le problème, c'est que l'aide MSDN ne donne aucun exemple, et que je
n'arrive pas à faire fonctionner la méthode SaveAdd (Img, EncoderParameter)
parce que je ne sais pas quoi mettre dans EncoderParameter.
Si vous avez des bouts de code, merci par avance
Il faut pas mettre une valeurs de type Bytes, il faut utiliser la class Encoding et faire un GetBytes je crois ...
Pourrais tu mettre le lien du MSDN (merci)
@+
-- TroXsA http://cerbermail.com/?rIXgaw9Xsl
alan
Tiens, si ca peut t'aider, ca marche impec
Private Function Charge_Fichier(ByVal xView As DataView) As String Dim NomFichier As String = "" If Not IO.Directory.Exists("c:Temp") Then Try IO.Directory.CreateDirectory("c:temp") Catch ex As Exception MyLog.WriteEntry("Echec de création du répertoire temporaire! Fax non envoyé", EventLogEntryType.Error) Return "" End Try End If If (xView.Count > 1) And (xView(0)("NomFichier").ToString.ToLower.EndsWith("jpg")) Then 'Images, a réunir en 1 Dim xImg() As Image Dim IdxImg As Integer = 0 Dim xFile As String = "c:Temp" & xView(0)("NomFichier").ToString.ToLower xFile = xFile.Substring(0, xFile.LastIndexOf(".")) & ".tif" If IO.File.Exists(xFile) Then Try IO.File.Delete(xFile) Catch ex As Exception MyLog.WriteEntry(("Erreur de suppression du fichier existant!" & vbCrLf & ex.ToString).Substring(211), EventLogEntryType.Error) End Try End If Dim Info As ImageCodecInfo = Nothing 'Recherche du codec "tiff" For Each ICE As ImageCodecInfo In ImageCodecInfo.GetImageEncoders If ICE.MimeType.ToLower.Trim = "image/tiff" Then Info = ICE Exit For End If Next ICE Dim enc As Encoder = Encoder.SaveFlag Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame)) 'Preparation de l'encodeur Dim Pages As Bitmap = Nothing Dim Frame As Integer = 0 For xCpt As Integer = 0 To xView.Count - 1 Try If Not IsDBNull(xView(xCpt)("P_Jointe")) Then Dim Datas() As Byte = xView(xCpt)("P_Jointe") Dim xStream As New IO.MemoryStream(datas) If Frame = 0 Then 'Premiere image Pages = Image.FromStream(xstream) Pages.Save(xFile, Info, ep) Else Dim bm As Bitmap = Image.FromStream(xstream) 'Ajouts au tiff ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.FrameDimensionPage)) Pages.SaveAdd(bm, ep) End If Frame += 1 xstream.Close() End If Catch ex As Exception End Try If xCpt = xView.Count - 1 Then 'Dernière image, sauvegarde finale ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.Flush)) Pages.SaveAdd(ep) End If Next Return xFile Else 'Sinon : envoi 1er fichier seulement If Not IsDBNull(xView(0)("P_Jointe")) Then 'Pièce jointe non nulle NomFichier = "c:Temp" & xView(0)("NomFichier") Try Dim xStream As New IO.FileStream(NomFichier, IO.FileMode.Create) Dim Datas() As Byte = xView(0)("P_Jointe") xStream.Write(Datas, 0, Datas.Length) xStream.Close() Return NomFichier Catch ex As Exception MyLog.WriteEntry(("Erreur de création du fichier" & vbCrLf & ex.ToString).Substring(0, 211), EventLogEntryType.Error) Return "" End Try Else Return "" End If End If End Function
"TroXsA - [VB.NET-2005]" a écrit :
Il faut pas mettre une valeurs de type Bytes, il faut utiliser la class Encoding et faire un GetBytes je crois ...
Pourrais tu mettre le lien du MSDN (merci)
@+
-- TroXsA http://cerbermail.com/?rIXgaw9Xsl
Tiens, si ca peut t'aider, ca marche impec
Private Function Charge_Fichier(ByVal xView As DataView) As String
Dim NomFichier As String = ""
If Not IO.Directory.Exists("c:Temp") Then
Try
IO.Directory.CreateDirectory("c:temp")
Catch ex As Exception
MyLog.WriteEntry("Echec de création du répertoire
temporaire! Fax non envoyé", EventLogEntryType.Error)
Return ""
End Try
End If
If (xView.Count > 1) And
(xView(0)("NomFichier").ToString.ToLower.EndsWith("jpg")) Then 'Images, a
réunir en 1
Dim xImg() As Image
Dim IdxImg As Integer = 0
Dim xFile As String = "c:Temp" &
xView(0)("NomFichier").ToString.ToLower
xFile = xFile.Substring(0, xFile.LastIndexOf(".")) & ".tif"
If IO.File.Exists(xFile) Then
Try
IO.File.Delete(xFile)
Catch ex As Exception
MyLog.WriteEntry(("Erreur de suppression du fichier
existant!" & vbCrLf & ex.ToString).Substring(211), EventLogEntryType.Error)
End Try
End If
Dim Info As ImageCodecInfo = Nothing 'Recherche du codec "tiff"
For Each ICE As ImageCodecInfo In ImageCodecInfo.GetImageEncoders
If ICE.MimeType.ToLower.Trim = "image/tiff" Then
Info = ICE
Exit For
End If
Next ICE
Dim enc As Encoder = Encoder.SaveFlag
Dim ep As New EncoderParameters(1)
ep.Param(0) = New EncoderParameter(enc,
CLng(EncoderValue.MultiFrame)) 'Preparation de l'encodeur
Dim Pages As Bitmap = Nothing
Dim Frame As Integer = 0
For xCpt As Integer = 0 To xView.Count - 1
Try
If Not IsDBNull(xView(xCpt)("P_Jointe")) Then
Dim Datas() As Byte = xView(xCpt)("P_Jointe")
Dim xStream As New IO.MemoryStream(datas)
If Frame = 0 Then 'Premiere image
Pages = Image.FromStream(xstream)
Pages.Save(xFile, Info, ep)
Else
Dim bm As Bitmap = Image.FromStream(xstream)
'Ajouts au tiff
ep.Param(0) = New EncoderParameter(enc,
CLng(EncoderValue.FrameDimensionPage))
Pages.SaveAdd(bm, ep)
End If
Frame += 1
xstream.Close()
End If
Catch ex As Exception
End Try
If xCpt = xView.Count - 1 Then 'Dernière image, sauvegarde
finale
ep.Param(0) = New EncoderParameter(enc,
CLng(EncoderValue.Flush))
Pages.SaveAdd(ep)
End If
Next
Return xFile
Else 'Sinon : envoi 1er fichier seulement
If Not IsDBNull(xView(0)("P_Jointe")) Then 'Pièce jointe non nulle
NomFichier = "c:Temp" & xView(0)("NomFichier")
Try
Dim xStream As New IO.FileStream(NomFichier,
IO.FileMode.Create)
Dim Datas() As Byte = xView(0)("P_Jointe")
xStream.Write(Datas, 0, Datas.Length)
xStream.Close()
Return NomFichier
Catch ex As Exception
MyLog.WriteEntry(("Erreur de création du fichier" &
vbCrLf & ex.ToString).Substring(0, 211), EventLogEntryType.Error)
Return ""
End Try
Else
Return ""
End If
End If
End Function
"TroXsA - [VB.NET-2005]" a écrit :
Il faut pas mettre une valeurs de type Bytes, il faut utiliser la class
Encoding et faire un GetBytes je crois ...
Private Function Charge_Fichier(ByVal xView As DataView) As String Dim NomFichier As String = "" If Not IO.Directory.Exists("c:Temp") Then Try IO.Directory.CreateDirectory("c:temp") Catch ex As Exception MyLog.WriteEntry("Echec de création du répertoire temporaire! Fax non envoyé", EventLogEntryType.Error) Return "" End Try End If If (xView.Count > 1) And (xView(0)("NomFichier").ToString.ToLower.EndsWith("jpg")) Then 'Images, a réunir en 1 Dim xImg() As Image Dim IdxImg As Integer = 0 Dim xFile As String = "c:Temp" & xView(0)("NomFichier").ToString.ToLower xFile = xFile.Substring(0, xFile.LastIndexOf(".")) & ".tif" If IO.File.Exists(xFile) Then Try IO.File.Delete(xFile) Catch ex As Exception MyLog.WriteEntry(("Erreur de suppression du fichier existant!" & vbCrLf & ex.ToString).Substring(211), EventLogEntryType.Error) End Try End If Dim Info As ImageCodecInfo = Nothing 'Recherche du codec "tiff" For Each ICE As ImageCodecInfo In ImageCodecInfo.GetImageEncoders If ICE.MimeType.ToLower.Trim = "image/tiff" Then Info = ICE Exit For End If Next ICE Dim enc As Encoder = Encoder.SaveFlag Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame)) 'Preparation de l'encodeur Dim Pages As Bitmap = Nothing Dim Frame As Integer = 0 For xCpt As Integer = 0 To xView.Count - 1 Try If Not IsDBNull(xView(xCpt)("P_Jointe")) Then Dim Datas() As Byte = xView(xCpt)("P_Jointe") Dim xStream As New IO.MemoryStream(datas) If Frame = 0 Then 'Premiere image Pages = Image.FromStream(xstream) Pages.Save(xFile, Info, ep) Else Dim bm As Bitmap = Image.FromStream(xstream) 'Ajouts au tiff ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.FrameDimensionPage)) Pages.SaveAdd(bm, ep) End If Frame += 1 xstream.Close() End If Catch ex As Exception End Try If xCpt = xView.Count - 1 Then 'Dernière image, sauvegarde finale ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.Flush)) Pages.SaveAdd(ep) End If Next Return xFile Else 'Sinon : envoi 1er fichier seulement If Not IsDBNull(xView(0)("P_Jointe")) Then 'Pièce jointe non nulle NomFichier = "c:Temp" & xView(0)("NomFichier") Try Dim xStream As New IO.FileStream(NomFichier, IO.FileMode.Create) Dim Datas() As Byte = xView(0)("P_Jointe") xStream.Write(Datas, 0, Datas.Length) xStream.Close() Return NomFichier Catch ex As Exception MyLog.WriteEntry(("Erreur de création du fichier" & vbCrLf & ex.ToString).Substring(0, 211), EventLogEntryType.Error) Return "" End Try Else Return "" End If End If End Function
"TroXsA - [VB.NET-2005]" a écrit :
Il faut pas mettre une valeurs de type Bytes, il faut utiliser la class Encoding et faire un GetBytes je crois ...