Based on this discussion Binarystream Text and Picture, it appears you are creating your own file format. That sort of thing can become fragile over time if you don’t do some sort of tag/value scheme. XML lends itself well to that. The main problem you may run into is if you are reading the file based on the way it was written out, you have to assume the order and size of the information. That’s the part that becomes brittle. It’s hard to add additional fields later on, because you have to worry about compatibility.
If an earlier version of the program reads the file, how will it handle new fields?
If a later version reads the file, how will it deal with missing fields?
That said,
You only get as many bytes as are left. Eg., if you have a 150 byte file and you’re currently at position 100, read(100) will return the remaining 50 bytes.
the byte size of the picture seems to be different when read in to what is written out in subsequent saves why would this be?
It could be variations in compression. If you were using Picture.ToData and Picture.FromData, (ie., no compression) it would be identical.