Моих кодов:Deal (Dispose) с Bitmap и парой при загрузке и изменение размера изображений на сервер VB.net
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
- После того как я генерировать
Bitmap newImage
, может ли сохранить его непосредственно на сервер, а не сохранить его вmemoryStream
Какой ресурс я должен распоряжаться? что касается шаблона MSDN
iDisposable
, нам нужно распоряжаться неуправляемым ресурсом. How to dispose managed resource in Dispose() method in C#?. Нужно ли в этом случае задействоватьfinalizer
? я прав?Могут ли коды улучшиться? например написать на сервер, размер метод и т.д.
С уважением,
отличная и ясная. – 2010-12-08 13:29:10
sry, забудьте упомянуть, что я удалил обработчик ошибок из этого кода, кажется, если я использую «использование», тогда мне не нужно распоряжаться ресурсом. – 2010-12-08 14:18:11