VS 2008 vs/ 2005, Image problem?

V

Victory

Hi,
I just used VS2008 and migrated a project from 2005 to
2008. The reason is that MSDN docs is saying the Image
object in .NET Framework 3.5 has a Finalize method, which i
want to try out since my app is processing a few image
files and then saying it is running out of memory. I am
using the Dispose method of this object to get rid of it
and then setting it to Nothing. in any case, when i used VS
2008, intellisense still does not show the Finalize method
as one of the methods of the object. Any idea why it is
still using the Image object from .net framework 2.0?
Please see code below:
thanks,
Mars


Private Function EvaluateTiffImage(ByRef displayObject
As ThreadMessageClass, ByVal fileName As String, _

ByVal startingPageNum As String, ByVal fileExt As String)
As Boolean

Dim result As Boolean = False

' count of images in the tiff file
Dim imageIndex As Integer = 0

Dim propertyValues As Byte() = Nothing
Dim compressionString As String = ""
Dim compressionValue As Int16 = 0
Dim tiffImage As Image = Nothing

displayObject.TargetWindow =
DISPLAY_ID.LIST_PROGRESS

Dim tiffData As TiffProcessingDataClass =
displayObject.MessageData

Try

' using the Imaging Managed objects
tiffImage = Image.FromFile(fileName)

If Not (tiffImage Is Nothing) Then

Dim propertyItems As
System.Drawing.Imaging.PropertyItem() =
tiffImage.PropertyItems

For propertyIndex As Integer = 0 To
propertyItems.Length

' Compression property has an id of 259
If propertyItems(propertyIndex).Id() =
259 Then

' The value of which is mapped to a
short type (i.e. Int16)
propertyValues =
propertyItems(propertyIndex).Value

' most significant bit is at higher
index
compressionString =
propertyValues(1) & propertyValues(0)
compressionValue =
Convert.ToInt16(compressionString)

tiffData.ImageCompression =
compressionValue

If ((compressionValue =
IMAGE_COMPRESSION.COMPRESSION_CCITTFAX4) And (fileExt =
".tif")) Or _
((compressionValue =
IMAGE_COMPRESSION.COMPRESSION_HUFFMAN_CCITTRLE) And
(fileExt = ".jpg")) Then

result = True
displayObject.MessageText =
"...Found " & GetCompressionName(compressionValue) & "
Compression for: <" & fileName & ">."

Else
displayObject.MessageText =
"...Error: " & GetCompressionName(compressionValue) & "
Compression: <" & fileName & ">."
displayObject.IsError = True
End If
DisplayMessage(displayObject)

' found what we are looking for
Exit For
End If
Next

Application.DoEvents()

' release the reference to the image object
imageIndex += 1

Else

displayObject.MessageText = "...Error: GDI+
error was unable to create a document for <" & fileName &
">."
displayObject.IsError = True
DisplayMessage(displayObject)

End If
Catch ex As Exception

Dim innerExceptionString As String = Nothing

If ex.InnerException Is Nothing Then
innerExceptionString = "No inner exception"
Else
innerExceptionString =
ex.InnerException.InnerException.Message
End If

displayObject.MessageText = "An exception
occurred: <" & ex.Message & ">, this error happened when "
& _

"Procedo was trying to process file: <" & fileName & ">
inner exception: <" & _

innerExceptionString & ">."
displayObject.IsError = True
displayObject.TargetWindow =
DISPLAY_ID.LIST_RESULT
DisplayMessage(displayObject)

Finally

If tiffImage IsNot Nothing Then
' tiffImage.Finalize() this line has a
syntax error when it is uncommented
tiffImage.Dispose()
tiffImage = Nothing
End If

End Try

Return result
End Function
 
S

Stanimir Stoyanov

Hi Mars,

You do not see and cannot use the Finalize method of the Image class because
it is protected and only accessible for use within the Image and/or any
derivative classes. A good practive would be to use the 'using' clause on an
Image instance so that you do not have to call Dispose manually and write
code such as tiffImage = Nothing:

Using img as Image = Image.FromFile("...")
' Make use of img here...
End Using

img would then be automatically disposed of.

This page on MSDN might give you more insight on how the Finalize method
works and should be used.
 
V

Victory

Ok, i changed the logic to use the Using statement. And i
made sure i have Microsoft .NET Framework 3.5 SP1
installed. But when i use the references and i check the
System.Drawing, i see that its version is 2.0.0.0 and its
Runtime version in the Add Reference dialog says
v2.0.50727. Is this the correct .net framework 3.5 sp1
version?

Mars
 
T

Tom Shelton

Ok, i changed the logic to use the Using statement. And i
made sure i have Microsoft .NET Framework 3.5 SP1
installed. But when i use the references and i check the
System.Drawing, i see that its version is 2.0.0.0 and its
Runtime version in the Add Reference dialog says
v2.0.50727. Is this the correct .net framework 3.5 sp1
version?

Mars

Yes. .NET 3.0 and 3.5 still use the 2.0 runtime. 3.0 and 3.5 are just
extensions to the existing 2.0 framework.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top