private void Read(byte[] emfFile)
{
int size = emfFile.Length;
int offset = 0;
while (offset < size)
{
// decode record header
var rec = ByteArrayToStructure<EmfRecord>(emfFile, offset);
NumRecords++;
if (rec.Type == (int)EmfRecordType.Header)
{
// decode EMF_HEADER
var header = ByteArrayToStructure<EmfHeader>(emfFile, offset);
Bounds = header.Bounds;
Frame = header.Frame;
DeviceSizePixel = header.Device;
DeviceSizeMillimeter = header.Millimeters;
DeviceSizeMicrometer = header.Micrometers;
}
else if (rec.Type == (int)EmfRecordType.Comment)
{
// decode EMF_COMMENT
var comment = ByteArrayToStructure<EmfComment>(emfFile, offset);
if (comment.CommentIdentifier == 0x2B464D45)
{
// process EMF+ records embedded in comment
ProcessEmfPlusRecords(emfFile, offset + 16, offset + 16 + (int)comment.DataSize);
}
}
offset += (int)rec.Size;
}
}