Hello all,
I found some code that resizes an uploaded image ( stream ) to a pre-determined size.
Using this code, it works perfectly..
Code:
' make sure we have a file .
If FileUpload3.HasFile Then
Dim name As String = FileUpload3.PostedFile.FileName
Dim Justname As String = Path.GetFileName(name)
Dim length As Integer = FileUpload3.PostedFile.ContentLength
' Response.Write("<hr>name:" & Justname & "<hr>")
' Response.Write("<hr>Len:" & length & "<hr>")
Dim imageBytes As Byte() = New Byte(length - 1) {}
Dim imageStream As Stream = FileUpload3.PostedFile.InputStream
' imageStream.Read(imageBytes, 0, length)
' Context.Response.BinaryWrite(ImgResizeer(imageStream, 200))
Using Bitmap1 As System.Drawing.Bitmap = System.Drawing.Bitmap.FromStream(imageStream)
Dim Width1 As Integer = Bitmap1.Width
Dim Height1 As Integer = Bitmap1.Height
' define the width for this file.
If Width1 > 250 Then
Dim Width2 As Integer = 250
Dim Height2 As Integer = Height1 * Width2 / Width1
Using Bitmap2 As System.Drawing.Bitmap = New System.Drawing.Bitmap(Width2, Height2)
Using Graphics1 As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(Bitmap2)
Graphics1.DrawImage(Bitmap1, 0, 0, Width2, Height2)
End Using
Using MemoryStream2 As New System.IO.MemoryStream
Bitmap2.Save(MemoryStream2, System.Drawing.Imaging.ImageFormat.Png)
Context.Response.BinaryWrite(MemoryStream2.ToArray)
End Using
End Using
End If
End Using
End If
What I'd like to do is move this code into a Class so I can call it from other pages, so I created a class and added this code...
Code:
Imports Microsoft.VisualBasic
Imports System.IO
Imports System
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Data.SqlClient
Imports System.DirectoryServices
Imports System.Data
Imports System.Drawing
Public Class ImageStreamResize
Public Function ImgResizeer(imageStream As Stream, requiredWidth As Integer) As Stream
Dim finalStr As Stream = imageStream
Using Bitmap1 As System.Drawing.Bitmap = System.Drawing.Bitmap.FromStream(imageStream)
Dim Width1 As Integer = Bitmap1.Width
Dim Height1 As Integer = Bitmap1.Height
' define the width for this file.
If Width1 > requiredWidth Then
Dim Width2 As Integer = requiredWidth
Dim Height2 As Integer = Height1 * Width2 / Width1
Using Bitmap2 As System.Drawing.Bitmap = New System.Drawing.Bitmap(Width2, Height2)
Using Graphics1 As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(Bitmap2)
Graphics1.DrawImage(Bitmap1, 0, 0, Width2, Height2)
End Using
Using MemoryStream2 As New System.IO.MemoryStream
Bitmap2.Save(MemoryStream2, System.Drawing.Imaging.ImageFormat.Png)
finalStr = MemoryStream2
End Using
End Using
End If
End Using
Return finalStr
End Function
End Class
As you can see, I'm trying to pass in a stream and defined width, and I want it to pass back the image ( if the size if greater than what I expected.
I'm trying to call the class like so.
Code:
' make sure we have a file and that we have an ID to set it to.
If FileUpload3.HasFile Then
Dim name As String = FileUpload3.PostedFile.FileName
Dim Justname As String = Path.GetFileName(name)
Dim length As Integer = FileUpload3.PostedFile.ContentLength
' Response.Write("<hr>name:" & Justname & "<hr>")
' Response.Write("<hr>Len:" & length & "<hr>")
Dim imageBytes As Byte() = New Byte(length - 1) {}
Dim imageStream As Stream = FileUpload3.PostedFile.InputStream
' imageStream.Read(imageBytes, 0, length)
Context.Response.BinaryWrite(cc.imgStr.ImgResizeer(imageStream, 200))
End If
Don't worry about the cc.imgStr this is just the path to my class which is defined futher up.
The Error I get is "Value of type system.io.stream, cannot be converted to ' 1 dimensional array of byte' "
Any help would be most appreciated!
Many thanks
Dave