Официальную спецификацию можно скачать прямо с MSDN на http://msdn.microsoft.com/en-us/library/cc230514(PROT.10).aspx.
Это займет некоторое время, чтобы прочитать и понять, но это определенно должно быть выполнимо, если вы раньше работали с двоичными форматами файлов.
Но, пожалуйста, обратите внимание, что EMF - это (псевдо) векторный формат изображения, и поэтому изображения можно масштабировать до любого размера. Но может быть по умолчанию ширина и высота. В частности, действительно должно быть четко определенное соотношение сторон.
Обновление
Я думаю , что ширина (в пикселях) метафайла является 5-м кардиналом файла, а высота (в пикселях) - 6-м кардиналом. В типичном случае. По крайней мере, это может быть хорошей отправной точкой для вас.
Я только что создал образец файла EMF, который запускается
01 00 00 00 88 00 00 00 00 00 00 00 00 00 00 00
ae 01 00 00 75 01 00 00 00 00 00 00 00 00 00 00
Пятый кардинал - это AE010000, который из-за байтового порядка байтов равен 000001AE в шестнадцатеричном формате, то есть 430 в десятичном виде. Шестой кардинал равен 75010000, то есть 00000175 в шестнадцатеричном или 373 в десятичном виде. Следовательно, я получаю размер 430 × 373 кв. Пикселей. Краска сообщает 432 × 374 кв. Пикселей.
Если у меня останется больше времени, я буду более подробно изучать формат файла. Но, по крайней мере, я надеюсь, что это может быть отправной точкой для вас.
Обновление 2
Третье и четвертое 32-разрядные целые числа, по-видимому, представляют собой левую и верхнюю координаты изображения в логических единицах, соответственно, в то время как пятое и шестое 32-разрядные целые числа представляют собой правую и нижнюю координаты. В большинстве случаев (top, left) = (0, 0)
, и тогда мой текст выше верен (то есть тогда width = right
, height = top
координата).
Если (top, left) <> (0, 0)
, то, естественно, width = right - left
и height = bottom - top
.
Теперь это, вероятно, не вся история; если вы сравните полученные цифры с теми, о которых сообщает Paint, вы получите небольшие отклонения. Так что продолжение следует ... .