Solved

Resizing multiple images runs out of memory

Posted on 2008-10-07
3
832 Views
Last Modified: 2012-05-05
Hi all,

Below is a function that I wrote that resizes images for a website. After it processes about 250 images, I run out of memory, leading me to believe that my dispose isn't working? There are 900 photos to process total. What have I missed?
Function resizeImage(ByVal imageName As String, ByVal newWidth As Integer, ByVal imageType As String, ByVal homeDirectory As String) As String
 

        Dim originalFileName As String

        Dim newFileName As String

        Dim tmpImage As Drawing.Bitmap

        Dim newImage As Drawing.Bitmap

        Dim g As Graphics

        Dim newHeight As Integer
 

        originalFileName = pickupFolder & imageName

        If File.Exists(originalFileName) = True Then

            Try

                tmpImage = New Bitmap(Bitmap.FromFile(originalFileName))

                newHeight = (newWidth * tmpImage.Height) / tmpImage.Width
 

                newImage = New Bitmap(newWidth, newHeight)

                g = Graphics.FromImage(newImage)
 
 

                ' draw it with the new size

                g.DrawImage(tmpImage, 0, 0, newWidth, newHeight)
 

                newFileName = imageType & Replace(imageName, " ", "")

                newImage.Save("c:\inetpub\wwwroot\" & homeDirectory & "\photos\" & newFileName, Drawing.Imaging.ImageFormat.Jpeg)

                g.Dispose()

                newImage.Dispose()

                tmpImage.Dispose()
 

                tmpImage = Nothing

                newImage = Nothing

                g = Nothing
 

                resizeImage = newFileName
 

            Catch ex As Exception
 

                streamWriter.WriteLine(originalFileName & " gave error: " & ex.Message)

                Console.WriteLine(originalFileName & " gave error: " & ex.Message)
 

            End Try
 

        Else

            streamWriter.WriteLine(originalFileName & " does not exist")

            Console.WriteLine(originalFileName & " does not exist")

        End If
 

        tmpImage = Nothing

        newImage = Nothing

        g = Nothing
 

    End Function

Open in new window

0
Comment
Question by:DEWebWorks
  • 2
3 Comments
 
LVL 14

Accepted Solution

by:
rachitkohli earned 500 total points
ID: 22658453
I would suggest making an image from the file using file stream object.

Dim fs as IO.FileStream
fs=new IO.FileStream("FILEPATH", ACCESSTYPE)
fs.close

tmpImage=Bitmap.FromStream(fs)

'Please check for the syntax, as am directly typing here without testing it...
0
 

Author Closing Comment

by:DEWebWorks
ID: 31503786
Very nice! Thanks.
0
 

Author Comment

by:DEWebWorks
ID: 22658504
Here's the final code:

    Function resizeImage(ByVal imageName As String, ByVal newWidth As Integer, ByVal imageType As String, ByVal homeDirectory As String) As String
 

        Dim originalFileName As String

        Dim newFileName As String

        Dim tmpImage As Drawing.Bitmap

        Dim newImage As Drawing.Bitmap

        Dim g As Graphics

        Dim newHeight As Integer
 

        '---

        Dim fs As IO.FileStream

        '---
 

        originalFileName = pickupFolder & imageName

        If File.Exists(originalFileName) = True Then

            Try

                'tmpImage = New Bitmap(Bitmap.FromFile(originalFileName))

                '---

                fs = New IO.FileStream(originalFileName, FileMode.Open)
 

                tmpImage = Bitmap.FromStream(fs)

                fs.Close()

                '---
 

                newHeight = (newWidth * tmpImage.Height) / tmpImage.Width
 

                newImage = New Bitmap(newWidth, newHeight)

                g = Graphics.FromImage(newImage)
 
 

                ' draw it with the new size

                g.DrawImage(tmpImage, 0, 0, newWidth, newHeight)

                g.Dispose()
 

                newFileName = imageType & Replace(imageName, " ", "")

                newImage.Save("c:\inetpub\wwwroot\" & homeDirectory & "\photos\" & newFileName, Drawing.Imaging.ImageFormat.Jpeg)
 

                newImage.Dispose()

                tmpImage.Dispose()
 

                tmpImage = Nothing

                newImage = Nothing

                g = Nothing
 

                resizeImage = newFileName
 

            Catch ex As Exception
 

                streamWriter.WriteLine(originalFileName & " gave error: " & ex.Message)

                Console.WriteLine(originalFileName & " gave error: " & ex.Message)
 

            End Try
 

        Else

            streamWriter.WriteLine(originalFileName & " does not exist")

            Console.WriteLine(originalFileName & " does not exist")

        End If
 

        tmpImage = Nothing

        newImage = Nothing

        g = Nothing
 

    End Function

Open in new window

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
Microsoft Reports are based on a report definition, which is an XML file that describes data and layout for the report, with a different extension. You can create a client-side report definition language (*.rdlc) file with Visual Studio, and build g…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now