I was a little curious so here is the code to load MPO images:
procedure ReadMPO(ImageEnView:TImageEnView; filename:string; imageIndex:integer);
var
mem_strm:TMemoryStream;
memPtr:pbyte;
jpeg_len:integer;
begin
mem_strm := TMemoryStream.Create();
try
// load the full file into memory
mem_strm.LoadFromFile(filename);
// calculate the length of the first jpeg
jpeg_len := IEGetJpegLength(mem_strm);
memPtr := mem_strm.Memory;
if imageIndex = 0 then
// load the first jpeg
ImageEnView.IO.LoadFromBuffer(memPtr, jpeg_len)
else
begin
// bypass first jpeg
inc(memPtr, jpeg_len);
// load the second jpeg
ImageEnView.IO.LoadFromBuffer(memPtr, mem_strm.Size - jpeg_len);
end;
finally
mem_strm.Free();
end;
end;
It loads the image in the specified TImageEnView component. imageIndex can 0 or 1 (depending if you want to load first or second image).
IEGetJpegLength is inside "jpegfilt" unit.
For example:
ReadMPO(ImageEnView1, 'dsc00065.mpo', 0);
or
ReadMPO(ImageEnView1, 'dsc00065.mpo', 1);
I tested MPO files from:
http://www.stereomaker.net/sony/stereo/sony_stereo.htm
Hope this helps.