Creo que la forma en la que lo estas haciendo es correcta. Primero lees un record, con un tamaño conocido, y una vez obtienes el tamaño de la imagen que viene a continuación lees la imagen. Es el mismo método que yo mismo usaría.
Lo que no entiendo muy bien es donde esta problema, aunque añadieras un campo mas (TBitmap o TJPEGImage) este solo seria un puntero a ese objeto, tu tendrías que crear el objeto y leer la imagen desde el fichero. Yo creo que deberías de ir un poco mas allá y empezar a utilizar clases (objetos) en vez de records para manejar estas estructuras un poco complicadas.
Por último, y si mi consejo de utilizar objetos no te convence, utiliza un record con un tamaño variable, gracias al milagro de los punteros. Declara un record tal que así:
Código Delphi
[-]
TFileRecord = packed record
Dato1: Cardinal;
Dato2: SmallInt;
Dato3: Byte; PhotoSize: Cardinal; Photo: array[0..0] of Byte;
end;
Y un puneto como este:
Código Delphi
[-]
PFileRecord = ^TFileRecord;
Ahora solo tienes que leer los primeros campos como hacias antes, obtener el tamaño de la imagen, reservar tanta memoria como necesites para guardar los campos y la imagen, y guardar en ella los campos y la imagen. Ahora a través de los campos del puntero tendrás acceso a todos los campos del record y a los datos de la imagen.
Perdona que no te ponga código, pero ando un poco ocupado.
