Delphi не может открыть файл WMF? - PullRequest
0 голосов
/ 08 января 2019

Я использую Delphi XE3. Я пытаюсь открыть файл WMF со следующим кодом:

    var
        Picture: TPicture;
    begin
        Picture := TPicture.Create();

        Picture.LoadFromFile('E:\temp\thumbnail.wmf');

        Picture.Free;
    end;    

Но я всегда получу недопустимое графическое исключение. Я пытаюсь открыть файл wmf с помощью других инструментов, таких как ACDSee, и подтверждаю, что изображение завершено. Почему Delphi не может его открыть. Я пробовал разные версии Delphi, но все не получается.

Файл wmf можно скачать по адресу https://www.dropbox.com/s/wcqdma42xlra07p/thumbnail.wmf?dl=0

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 января 2019

TPicture использует класс VCL TMetafile по умолчанию для загрузки файлов WMF. Но, как сказано в ответе Уве, TMetafile может загружать только размещаемые метафайлы WMF 1 , и ваш файл не является размещаемым метафайлом WMF 2 .

Даже класс VCL TWICImage, который является оболочкой для API WIC (Windows Imaging Component) от Microsoft, который может загружать многие форматы изображений, поддерживаемые Windows, также не может загрузить ваш файл, и это сбой происходит от самой ОС, а не от VCL. Тем не менее, WIC является расширяемым, поэтому вы можете попробовать реализовать и зарегистрировать пользовательский декодер для обработки вашего файла WMF. Формат метафайла задокументирован в MSDN .

Тем не менее, WMF действительно является устаревшим форматом изображений из 16-битных дней. Если вы действительно хотите работать с метафайлами, вам следует использовать EMF, который также поддерживается TMetafile.

1: размещаемый метафайл WMF содержит дополнительный заголовок для описания координат XY, где изображение должно быть нарисовано на холсте GDI, и количество логических единиц на дюйм для масштабирования изображения.

2: Ваш файл идентифицирует себя как неразмещаемый метафайл в формате MEMORYMETAFILE, а не в формате DISKMETAFILE. Интересно, это как-то связано с вашей проблемой?

0 голосов
/ 08 января 2019

Delphi может читать только размещаемые метафайлы WMF, начинающиеся с Записи размещаемого заголовка WMF . Данный файл просто не является размещаемым метафайлом WMF.

...