blowdesign
Messages postés22Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention31 janvier 2009
-
10 févr. 2007 à 16:32
blowdesign
Messages postés22Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention31 janvier 2009
-
13 févr. 2007 à 10:15
J'ai un fichier image téléchargé par un upload.
L'objet est un stream.
Je voudrais redimensionner l'image avant de l'enregistrer dans SQL
Mais le stream n'est pas changé car je n'arrive pas à transformer mon bitmap (nécessaire pour changer la taille de l'image) en stream. C'est la fonction RedimensionneImage qui pose problème
Voici le code :
'On passe la hauteur max, la largeur max, et le fichier type System.IO.Stream (System.IO.HttpStream)
clsImage.VerifieTailleImage(clsConstantes.i_MAXHEIGHT_IMG_CULTURE, clsConstantes.i_MAXWIDTH_IMG_CULTURE, e.UploadedFile.InputStream)
Shared Sub VerifieTailleImage(ByVal iMaxHeigth As Integer, _
ByVal iMaxWidth As Integer, _
ByRef ObjImg As Object)
Dim iCoefficient As Double = 0
Dim iCoefficientHeight As Double = 0
Dim iCoefficientWidth As Double = 0
Dim iNewHeight As Integer = 0
Dim iNewWidth As Integer = 0
Dim iHeightImg As Integer = 0
Dim iWidthImg As Integer = 0
Dim imgClientSize As Size = New System.Drawing.Size(0, 0)
Shared Function CalculeTailleImage(ByVal ObjImg As Object) As Size
Dim b As System.Drawing.Bitmap = Nothing
Dim imgClientSize As Size = New System.Drawing.Size(0, 0)
Select Case ObjImg.GetType().Name
Case GetType(Image).Name
b = New System.Drawing.Bitmap(CType(ObjImg, Image))
imgClientSize = New System.Drawing.Size(b.Size.Width, b.Size.Height)
Case GetType(ImageButton).Name
imgClientSize = New System.Drawing.Size(CType(ObjImg, ImageButton).Height.Value, CType(ObjImg, ImageButton).Width.Value)
Case Else
If ObjImg.GetType.Name.Contains(GetType(System.IO.Stream).Name) Then
b = New System.Drawing.Bitmap(CType(ObjImg, System.IO.Stream))
imgClientSize = New System.Drawing.Size(b.Size.Width, b.Size.Height)
End If
End Select
Return imgClientSize
End Function
Shared Function RedimensionneImage(ByVal iNewHeight As Integer, _
ByVal iNewWidth As Integer, _
ByRef ObjImg As Object) As Object
Select Case ObjImg.GetType().Name
Case GetType(Image).Name
Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(CType(ObjImg, Image))
Dim Newb As System.Drawing.Bitmap = New System.Drawing.Bitmap(iNewWidth, iNewHeight, b.PixelFormat)
b = Newb
Dim objNewImage As Image = CType(ObjImg, Image)
objNewImage = New System.Drawing.Bitmap(b)
ObjImg = objNewImage
Case GetType(ImageButton).Name
CType(ObjImg, ImageButton).Height = System.Web.UI.WebControls.Unit.Parse(iNewHeight)
CType(ObjImg, ImageButton).Width = System.Web.UI.WebControls.Unit.Parse(iNewWidth)
Case Else
If ObjImg.GetType.Name.Contains(GetType(System.IO.Stream).Name) Then
Dim s As System.IO.Stream = CType(ObjImg, System.IO.Stream)
Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(s)
Dim Newb As System.Drawing.Bitmap = New System.Drawing.Bitmap(iNewWidth, iNewHeight, b.PixelFormat)
b = Newb
ObjImg = b
End If
End Select
blowdesign
Messages postés22Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention31 janvier 2009 13 févr. 2007 à 10:15
Ok, voilà pour ceux que ça intéresse (en VB.Net)
/* L'appel de la méthode */
*********************
'Vérifie les dimensions de l'image et la redimensione si besoin
Dim image As System.Drawing.Image = Nothing
Dim NewBmp As Bitmap = Nothing
Dim Stream As System.IO.MemoryStream = New System.IO.MemoryStream
NewBmp.Save(Stream, image.RawFormat)
c = Stream.Length
ReDim objTampon(c)
objTampon = Stream.GetBuffer()
e.InputParameters("img") = objTampon
Catch ex As Exception
Throw New ApplicationException(ex.Message, ex.InnerException)
Finally
If image IsNot Nothing Then
image.Dispose()
End If
If NewBmp IsNot Nothing Then
NewBmp.Dispose()
End If
If Stream IsNot Nothing Then
Stream.Close()
End If
End Try
***************
/* La classe Image */
****************
Public Class clsImage
''' <summary>
''' Calcule les dimensions d'une image
''' </summary>
''' Objet image pour lequel on recherche les dimensions
''' <returns>Retourne un Size contenant les dimensions de l'image</returns>
''' <remarks></remarks>
Shared Function CalculeTailleImage(ByVal ObjImg As Image) As Size
Dim b As System.Drawing.Bitmap = Nothing
Dim imgClientSize As Size = New System.Drawing.Size(0, 0)
b = New System.Drawing.Bitmap(ObjImg)
imgClientSize = New System.Drawing.Size(b.Size.Width, b.Size.Height)
Return imgClientSize
End Function
''' <summary>
''' Redimmensionne une image
''' </summary>
''' Entier définissant la nouvelle hauteur de l'image
''' Entier définissant la nouvelle largeur de l'image
''' Objet image qui sera redimmensionné
''' <returns>Retounre un Bitmap de la nouvelle image</returns>
''' <remarks>Le Bitmap est utile au cas où l'on veut enregistrer l'image dans un flux (Stream)
''' afin d'enregistrer l'image dans une Base de Donnée par exemple</remarks>
Shared Function RedimensionneImage(ByVal iNewHeight As Integer, _
ByVal iNewWidth As Integer, _
ByVal ObjImg As Image) As Bitmap
Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(ObjImg)
Dim Newb As System.Drawing.Bitmap = New System.Drawing.Bitmap(ObjImg, iNewWidth, iNewHeight)
Return Newb
End Function
''' <summary>
''' Vérifie la taille d'une image et la redimensionne si besoin
''' </summary>
''' Entier définissant la hauteur maximale autorisée
''' Entier définissant la largeur maximale autorisée
''' Objet image à vérifier
''' <returns>Retounre un Bitmap de la nouvelle image</returns>
''' <remarks>Le Bitmap est utile au cas où l'on veut enregistrer l'image dans un flux (Stream)
''' afin d'enregistrer l'image dans une Base de Donnée par exemple. Cette fonction utilise les Fonctions CalculeTailleImage et RedimensionneImage</remarks>
Shared Function VerifieTailleImage(ByVal iMaxHeigth As Integer, _
ByVal iMaxWidth As Integer, _
ByVal ObjImg As Image) As Bitmap
Dim iCoefficient As Double = 0
Dim iCoefficientHeight As Double = 0
Dim iCoefficientWidth As Double = 0
Dim iNewHeight As Integer = 0
Dim iNewWidth As Integer = 0
Dim iHeightImg As Integer = 0
Dim iWidthImg As Integer = 0
Dim imgClientSize As Size = New System.Drawing.Size(0, 0)
Dim ObjRetun As Object = Nothing