My codes:
Public Function HandleImageUpload(ByVal serverPath As String, ByVal iWidth As Integer, ByVal iHeight As Integer) As String
Dim fileStream As Stream = imageUploader1.PostedFile.InputStream
Dim fileName As String
Dim newSize As Size = New Size
Dim extension As String
Dim imageBytes As Byte()
Dim stream As New FileStream(serverPath, FileMode.Create)
If imageUploader1.HasFile Then
If imageUploader1.FileBytes.Length < 4194304 Then
imageBytes = imageUploader1.FileBytes
fileName = imageUploader1.FileName
extension = Path.GetExtension(fileName)
If extension.ToLower = ".png" Or extension.ToLower = ".bmp" _
Or extension.ToLower = ".gif" Or extension.ToLower = ".jpg" Then
newSize.Width = iWidth
newSize.Height = iHeight
imageBytes = ResizeImageFile(fileStream, newSize)
stream.Write(imageBytes, 0, imageBytes.Length)
'need dispose or hte server will keep it'
stream.Dispose()
End If
End If
End If
End Function
Public Function ResizeImageFile(ByVal fileStream As Stream, ByVal newSize As Size) As Byte()
Dim memoryStream As MemoryStream = New MemoryStream
Dim oldImage As System.Drawing.Image = System.Drawing.Image.FromStream(fileStream)
Dim newImage As Bitmap = New Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)
Dim canvas As Graphics = Graphics.FromImage(newImage)
canvas.SmoothingMode = SmoothingMode.AntiAlias
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality
canvas.DrawImage(oldImage, New Rectangle(New Point(0, 0), newSize))
'question here'
newImage.Save(memoryStream, ImageFormat.Jpeg)
'Dispose right?'
oldImage.Dispose()
canvas.Dispose()
newImage.Dispose()
Return memoryStream.GetBuffer
End Function
End Class
- After I generate
Bitmap newImage
, could I save it directly to the server rather than save it inmemoryStream
Which resource should I dispose? regards to MSDN
iDisposable
pattern, we need to dispose unmanaged resource. How to dispose managed resource in Dispose() method in C#? . do I need involvefinalizer
in this case? am I doing right?Can the codes be improved? e.g. write to server, resize method, etc.
Regards,