Get the Length of an Image Created using Memory Stream

Hello Experts!

OK, so I need to get the Length of an Image created from a Memory Stream:
        Dim memstrm As IO.MemoryStream = New IO.MemoryStream
        Dim ticket As New Bitmap(1312, 574)

        Dim ticketGraphics As Graphics = Graphics.FromImage(ticket)
        ticketGraphics.FillRectangle(Brushes.White, 0, 0, 1312, 574)
        ticket.Save(memstrm, System.Drawing.Imaging.ImageFormat.Tiff)

When I do memstrm.Length this is NOT the Length I need.
The Length I need is 14584

I get the 14584 when I open the file using a FileStream...but how can I get this length so I don't have to save the file then open again?

Mark
smithmrkAsked:
Who is Participating?
 
Jacques Bourgeois (James Burger)Connect With a Mentor PresidentCommented:
Your are saving directly through Bitmap. Not that I went through a filestream to do the job.

Compression can be different depending on the method you use to save the file. And some methods of saving a bitmap will had extra information.

In my example, I explicitely saved through a Stream both for the memory stream and the file stream, to make sure that the same algorithm was used.
0
 
Russ SuterCommented:
So what length are you getting?

You may need to call the Flush() method before requesting the length.
0
 
smithmrkAuthor Commented:
I just tried the Flush that didn't seem to work.
I'm getting 50168

Mark
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Jacques Bourgeois (James Burger)PresidentCommented:
Is there something that your are not showing us. The following gives me exactly the same reading, 4926 and 4926:

		Dim memstrm As IO.MemoryStream = New IO.MemoryStream
		Dim filestrm As IO.FileStream = New IO.FileStream(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Test.tiff", FileMode.Create)
		Dim ticket As New Bitmap(1312, 574)

		Dim ticketGraphics As Graphics = Graphics.FromImage(ticket)
		ticketGraphics.FillRectangle(Brushes.White, 0, 0, 1312, 574)
		ticket.Save(memstrm, System.Drawing.Imaging.ImageFormat.Tiff)
		ticket.Save(filestrm, Imaging.ImageFormat.Tiff)
		filestrm.Close()

		Debug.WriteLine(memstrm.Length)
		Debug.WriteLine(New IO.FileInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Test.tiff").Length)
		memstrm.Close()

Open in new window

0
 
smithmrkAuthor Commented:
Do it this way and you will see what I mean:

    Private Sub Test()
        Dim memstrm As IO.MemoryStream = New IO.MemoryStream
        Dim ticket As New Bitmap(1312, 574)

        Dim ticketGraphics As Graphics = Graphics.FromImage(ticket)
        ticketGraphics.FillRectangle(Brushes.White, 0, 0, 1312, 574)
        ticket.Save(memstrm, System.Drawing.Imaging.ImageFormat.Tiff)
        ticket.Save("C:\Images\Mark.tif")

        MessageBox.Show(memstrm.Length)
        MessageBox.Show(New IO.FileStream("C:\Images\Mark.tif", IO.FileMode.Open).Length)
    End Sub

Mark
0
 
smithmrkAuthor Commented:
OK, so I can't get the 14584 Length unless I save it?

I don't want to have to save it open it get the 14584 then close it and delete it.
That is a lot of steps just to get the 14584 number.

I'm creating images on the fly and need to save them all in a Stacked Image when done.
Once the Stacked Image is done I will have an XML file with all the offsets and lengths to find the image with in the stacked image.

I don't want to have to write out a bunch images then loop through them all to get the lenghts and create a stacked image from all the indivdual images, then delete them all.

Mark
0
 
smithmrkAuthor Commented:
OK, I figured it out!

Thanks,
Mark
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.