Results 1 to 2 of 2

Thread: Image resizing from a class?

  1. #1

    Thread Starter
    Lively Member hb21l6's Avatar
    Join Date
    Sep 2008
    Location
    UK - East Yorkshire
    Posts
    126

    Image resizing from a class?

    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

  2. #2

    Thread Starter
    Lively Member hb21l6's Avatar
    Join Date
    Sep 2008
    Location
    UK - East Yorkshire
    Posts
    126

    Re: Image resizing from a class?

    Its OK, I fixed it

    output as MemoryStream...

    Public Function ImgResizeer(imageStream As Stream, requiredWidth As Integer) As MemoryStream


    Also.

    Write out to toArray

    Context.Response.BinaryWrite(cc.imgStr.ImgResizeer(imageStream, 200).ToArray)


    Works great..

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width