Кіріспе
Суреттер үшін файл форматы
Windows Metafile (WMF) – бастапқыда 1990 жылдары Microsoft Windows үшін жасалған сурет файл форматы. Бастапқы Windows Metafile форматы құрылғыға тәуелді емес (бірақ орналасу қаптарымен көбірек тәуелсіздікке қол жеткізуге болады) және векторлық графика мен растрлік компоненттерді қамтуы мүмкін. Ол SVG файлдары сияқты жұмыс істейді. WMF файлдары кейіннен құрылғы тәуелсіздігін қамтамасыз ететін Enhanced Metafiles (EMF файлдары)мен алмастырылды. EMF файлдары өз кезегінде EMF+ файлдары арқылы жақсартылды. Негізінде, метафайл экранда суретті көрсету үшін сурет салу командаларынан, қасиеттер анықтамасынан және графикалық объектілерден тұратын жазбалар тізімін сақтайды. Қолданылатын сурет салу командалары Microsoft Windows-та сурет салу үшін қолданылатын Graphics Device Interface (GDI) API командаларымен тығыз байланысты. Метафайлдардың үш негізгі түрі бар – WMF – Windows 3.0-да пайда болған 16 биттік формат. Бұл Word, PowerPoint және Publisher сияқты Microsoft Office қосымшалары үшін негізгі векторлық формат. 2023 жылдан бастап Windows Metafile Format спецификациясының 17-ші нұсқасы қолжетімді. WMF файлдарын алмастырған EMF файлдары, 32 биттік файл форматында жұмыс істейді және «түсініктеме» жазбаларында жеке деректерді ендіруге мүмкіндік береді. EMF+ – EMF файлдарының кеңейтімі, ол осы түсініктеме жазбаларына енгізілген және Windows GDI+-ға ұқсас командаларды, объектілерді және қасиеттерді пайдалана отырып, суреттер мен мәтінге мүмкіндік береді.
Windows Metafile (WMF) is an image file format originally designed for Microsoft Windows in the 1990s. The original Windows Metafile format was not device independent (though could be made more so with placement headers) and may contain both vector graphics and bitmap components. It acts in a similar manner to SVG files. WMF files were later superseded by Enhanced Metafiles (EMF files) which did provide for device independence. EMF files were then themselves enhanced via EMF+ files. Essentially, a metafile stores a list of records consisting of drawing commands, property definitions and graphics objects to display an image on screen. The drawing commands used are closely related to the commands of the Graphics Device Interface (GDI) API used for drawing in Microsoft Windows. There are three major types of metafiles – a WMF is a 16 bit format introduced in Windows 3.0. It is the native vector format for Microsoft Office applications such as Word, PowerPoint, and Publisher. as of 2023, revision 17 of the Windows Metafile Format specification is available. EMF files, which replaced WMF files, work on the same principle only it is a 32 bit file format that also allows for the embedding of private data within "comment" records. EMF+ is an extension to EMF files and embedded in these comment records, allowing for images and text using commands, objects and properties that are similar to Windows GDI+.
Тарих
16 биттік WMF файл форматы 1992 жылғы Windows 3.1 SDK құжаттамасының 4-томында толық сипатталған (кем дегенде, егер басқа томдардағы жеке функциялар мен құрылымдардың сипаттамаларымен біріктірсе), бірақ бұл сипаттама бірнеше егжей-тегжейлі мәселелер бойынша нақты болмады. Бұл нұсқаулықтар кітап дүкендерінде EULA немесе басқа да ерекше лицензиялық шектеулерсіз қолма-қол кітаптар түрінде басылып шығарылды (тек бағдарламалық пакеттің бір бөлігі ретінде сатып алынса, бағдарламалық жасақтама сол пакеттің шарттарына бағынады деген жалпы ескерту болды). Уақыт өте келе бұл тарихи сипаттаманың бар екені көбінесе ұмытылды, ал кейбір баламалы іске асырулар WMF файлдарының файл форматын анықтау үшін кері инженерия жасауға мәжбүр болды, бұл қиын және қателерге бейім болды. 2006 жылдың қыркүйегінде Microsoft WMF файл форматының сипаттамасын Microsoft Open Specification Promise аясында толыққанды жариялады, файл форматын іске асырушыларға патенттік құқықтарын қолданбайтынына уәде берді. Кейіннен Microsoft WMF файлдарын 32 биттік EMF файлдарына алмастырды, себебі WMF файлдары құрылғы тәуелсіздігімен байланысты нақты мәселелерге тап болды, тіпті «орналастырылатын» файл басқасының қолданылуына қарамастан, ол негізгі құрылғы тәуелсіздігін қамтамасыз ете алмады. Microsoft бұл форматты пайдаланатын әзірлеушілердің «метафайлдарға қосымша, орналасқан жері немесе масштабтау туралы түсініктемелерді енгізгенін» және басқалары метафайлға түрлі қосымшаға қатысты ақпаратты қосқандарын анықтады, бұл үлкен үйлесімділік мәселелерін тудырды. Осылайша, 1992 жылы Windows NT 3.1 арқылы Microsoft Win32 API негізінде құрылғы тәуелсіздігін қамтамасыз ететін Enhanced Metafile format (EMF) форматын енгізді. Windows XP және GDI+ шығарылымымен жазбалар жиынтығын айтарлықтай кеңейту қажет болды, сондықтан Microsoft EMF+ файлын қолданыстағы EMF файл форматының кеңейтілген нұсқасы ретінде шығарды.
Метафайл құрылымы
WMF, EMF және EMF+ файлдары графикалық шығыс жасау үшін ойнатылатын жазбалар тізбегінен тұрады. Кейбір жазбалар графикалық нысандарды қалай салу керектігін анықтау үшін қолданылатын графикалық нысандарды анықтайтын объектілерді сипаттайды (мысалы, қаламдар сызықтардың түсі мен енін анықтайды). Бұл объектілердің әрқайсысы метафайлдарда сақталады және метафайл өңделген кезде графикалық нысандардың қолданылуын қадағалайтын объектілер кестесіне қойылады. Объектілер кестесі – метафайл ішінде анықталған графикалық объектілер құрылымдарына сілтемелердің ассоциативтік массиві. WMF және EMF файлдары EMF+ файлдарындағы EMF+ жазбаларынан өзгеше объектілерді өңдеуді жүзеге асырады. WMF және EMF файлы өңделген кезде, объект анықталғаннан кейін жазбалар объектілер кестесіне енгізіледі. Егер объект жойылса, онда ол кестеден босатылады және идентификаторын қайта пайдалануға болады. Маңыздысы, объект жазу ойнатылатын кезде нақты таңдалмайынша қолданылмайды. Бұл EMF+ файлдарынан ерекшеленеді, олар объектіні оның идентификаторымен бірге тіркейтін хэш-карта арқылы ассоциативтік массивті пайдаланады. Дегенмен, WMF және EMF файлдарынан айырмашылығы, олар объектіні жоя алады, жаңа объект құрылған кезде, егер ол қолданыстағы объектінің индексімен сәйкес келсе, кестедегі жазба жаңа объектімен алмастырылады. EMF файлында объектіні пайдаланар алдында оны нақты таңдаудың қажеті жоқ.
Бит карта жазбалары
Бит карта жазбалары бит карта суреттерін басқару және шығару. Атауы: МЕТА BITBLT – Бит блогын ауыстыру тәсілін анықтайды. Бұл жазбалар дереккөз ретінде немесе аймақ ретінде қолданылатын бит картасын көрсетуі мүмкін. META DIBBITBLT – Құрылғыдан тәуелсіз бит картасы кескінінің бит блогын ауыстыру тәсілін анықтайды. Бұл жазбалар дереккөз ретінде немесе аймақ ретінде қолданылатын бит картасын көрсетуі мүмкін. META DIBSTRETCHBITBLT – Құрылғыдан тәуелсіз бит картасы кескінінің бит блогын ауыстыру тәсілін анықтайды, бірақ кескінді кеңейтуге немесе қысқартуға мүмкіндік береді. Бұл жазбалар дереккөз ретінде немесе аймақ ретінде қолданылатын бит картасын көрсетуі мүмкін. META SETDIBTODEV – Құрылғыдан тәуелсіз бит картасы кескінінде пиксель блогын орнату үшін түстерді анықтайды. Бұл жазбалар дереккөз ретінде немесе аймақ ретінде қолданылатын бит картасын көрсетуі мүмкін. META STRETCHBLT – Бит блогын ауыстыру тәсілін анықтайды, бірақ кескінді кеңейтуге немесе қысқартуға мүмкіндік береді. META STRETCHDIB – Құрылғыдан тәуелсіз бит картасы кескінінің бит блогын ауыстыру тәсілін анықтайды, бірақ кескінді кеңейтуге немесе қысқартуға мүмкіндік береді. Бұл жазбалар дереккөз ретінде немесе аймақ ретінде қолданылатын бит картасын көрсетуі мүмкін.
Тарту жазбалары
Сурет жазулары графикалық шығыс тудырады. Атауы: Сипаттамасы: META ARC Эллипстік доғаны сызады. META CHORD Аккордты сызады. META ELLIPSE Эллипстік доғаны салады. META EXTFLOODFILL Қылқаламмен бір аумақты толтырады. META EXTTEXTOUT Ойнату құрылғысының контекстіндегі қаріп, фон түсі және мәтін түсі арқылы мәтінді шығарады. META FILLREGION Белгіленген қылқаламмен аймақты толтырады. META FLOODFILL Қылқаламмен бір аумақты толтырады. META FRAMEREGION Беттің бір аймағына қылқаламмен шекара салады. META INVERTREGION Графикалық өңірді кері түстермен бояйды. META LINETO Ойнату құрылғысының контекстінде анықталған сызу орнынан белгіленген нүктеге дейін жартылай ашық сызық салады. META PAINTREGION Ойнату құрылғысының контекстінде көрсетілген ағымдағы қылқаламмен аймақты бояйды. META PATBLT Ойнату құрылғысының контекстінде көрсетілген ағымдағы қылқаламмен аймақты бояйды, содан кейін қылқалам түсі мен бет түсін растрлық операция арқылы біріктіреді. META PIE Эллипс пен екі радиалдың қиылысуымен шектелген пирог пішіндес бөлікті салады. Сызық ойнату құрылғысы арқылы орнатылған қаламмен жүзеге асырылады, ал пирог пішіндес бөлікпен шектелген аймақ ойнату құрылғысының контекстіндегі ағымдағы қылқаламмен толтырылады. META POLYLINE Белгіленген массивтегі нүктелерді қосып, сызық сегменттерінің тізбегін салады. META POLYGON Түзу сызықтармен байланысқан екі немесе одан көп төбесі бар көпбұрышты бояйды. Көпбұрыш қаламмен сызылады және ойнату құрылғысының контекстінде анықталған қылқалам мен көпбұрышты толтыру режимі арқылы толтырылады. META POLYPOLYGON Бір-бірімен қабаттасуы мүмкін жабық көпбұрыштар тізбегін бояйды. Әрбір көпбұрыш қаламмен сызылады және ойнату құрылғысының контекстінде анықталған қылқалам мен көпбұрышты толтыру режимі арқылы толтырылады. META RECTANGLE Қаламмен сызылған және қылқаламмен толтырылған тіктөртбұрышты бояйды, ойнату құрылғысының контекстінде анықталған қылқаламмен толтырылады. META ROUNDRECT Дөңгеленген бұрыштары бар тіктөртбұрышты бояйды. Тіктөртбұрыш қаламмен сызылады және қылқаламмен толтырылады, ойнату құрылғысының контекстінде анықталған қылқаламмен толтырылады. META SETPIXEL Белгіленген координаттардағы пиксельді көрсетілген түске орнатады. META TEXTOUT Ойнату құрылғысының контекстінде анықталған қаріп, фон түсі және мәтін түсі арқылы көрсетілген жерде таңбалар тізбегін шығарады.
Мемлекеттік жазбалар
Мемлекеттік жазбалар ойнату құрылғысының графикалық қасиеттерін басқарады. Атауы Сипаттама META ANIMATEPALETTE Белгіленген Палитра нысанымен ойнату құрылғысының контекстінде анықталған логикалық палитрадағы жазбаларды қайта анықтайды. META EXCLUDECLIPRECT Ойнату құрылғысының контекстінде анықталған қию аймағын, қолданыстағы қию аймағынан белгілі бір тіктөртбұрышты алып тастау арқылы орнатады. META INTERSECTCLIPRECT Ойнату құрылғысының контекстінде анықталған қию аймағын, қолданыстағы қию аймағы мен белгіленген тіктөртбұрыштың қиылысына орнатады. META MOVETO Ойнату құрылғысының контекстіндегі шығыс орнын белгіленген нүктеге орнатады. META OFFSETCLIPRGN Ойнату құрылғысының контекстінде белгіленген қию аймағын, көрсетілген ығысулар арқылы жылжытады. META OFFSETVIEWPORTORG Көрініс портының бастапқы нүктесін ойнату құрылғысының контекстінде, көрсетілген көлденең және тік ығысулармен жылжытады. META OFFSETWINDOWORG Ойнату құрылғысының контекстіндегі шығыс терезесінің бастапқы нүктесін, көрсетілген көлденең және тік ығысулармен жылжытады. META REALIZEPALETTE Ойнату құрылғысының контекстінде анықталған логикалық палитрадан түстерді жүйелік палитраға көшіреді. META RESIZEPALETTE Ойнату құрылғысының контекстінде анықталған логикалық палитраның мөлшерін қайта анықтайды. META RESTOREDC Бұрын сақталған құрылғы контекстінен ойнату құрылғысының контекстін қалпына келтіреді. META SAVEDC Ойнату құрылғысының контекстін кейіннен алу үшін сақтайды. META SCALEVIEWPORTEXT Ойнату құрылғысының контекстінде анықталған көрініс портының көлденең және тік өлшемдерін, көрсетілген көбейткіштер мен бөлгіштер арқылы есептелген қатынастарды пайдаланып өзгертеді. META SCALEWINDOWEXT Ойнату құрылғысының контекстіндегі шығыс терезесінің көлденең және тік өлшемдерін, көрсетілген көбейткіштер мен бөлгіштер арқылы есептелген қатынастарды пайдаланып өзгертеді. META SETBKCOLOR Ойнату құрылғысының контекстіндегі фондық түсті белгіленген түске орнатады. META SETBKMODE Ойнату құрылғысының контекстіндегі фондық араласу режимін орнатады. META SETLAYOUT Ойнату құрылғысының контекстіндегі макет бағытын анықтайды. META SETMAPMODE Ойнату құрылғысының контекстіндегі карталау режимін анықтайды. META SETMAPPERFLAGS Физикалық қаріптерге логикалық қаріптерді сәйкестендіру кезінде қаріп картасын құрастырушы қолданатын алгоритмді анықтайды. META SETPALENTRIES Ойнату құрылғысының контекстінде анықталған логикалық палитрадағы жазбалар диапазонындағы RGB түс мәндерін анықтайды. META SETPOLYFILLMODE Көпбұрыштарды толтыру операциялары үшін ойнату құрылғысының контекстіндегі көпбұрышты толтыру режимін анықтайды. META SETRELABS Қолданылмаған жазба. META SETROP2 Ойнату құрылғысының контекстіндегі алдыңғы растрлық операцияның араласу режимін анықтайды. META SETSTRETCHBLTMODE Ойнату құрылғысының контекстіндегі битмаптың созылу режимін анықтайды. META SETTEXTALIGN Ойнату құрылғысының контекстіндегі мәтін туралану мәндерін анықтайды. META SETTEXTCHAREXTRA Ойнату құрылғысының контекстіндегі мәтінді туралау үшін таңбалар арасындағы аралықты анықтайды. META SETTEXTCOLOR Ойнату құрылғысының контекстіндегі мәтіннің алдыңғы пландағы түсін анықтайды. META SETTEXTJUSTIFICATION Тексерілген мәтіннің жолындағы сынған таңбаларға қосылатын бос орын мөлшерін анықтайды. META SETVIEWPORTEXT Ойнату құрылғысының контекстіндегі көрініс портының көлденең және тік өлшемдерін анықтайды. META SETVIEWPORTORG Ойнату құрылғысының контекстіндегі көрініс портының бастапқы нүктесін анықтайды. META SETWINDOWEXT Ойнату құрылғысының контекстіндегі шығыс терезесінің көлденең және тік өлшемдерін анықтайды. META SETWINDOWORG Ойнату құрылғысының контекстіндегі шығыс терезесінің бастапқы нүктесін анықтайды.
ЭМҚ+
Windows XP-нің шығарылуымен Enhanced Metafile Format Plus Extensions (EMF+) форматы пайда болды. EMF+ GDI+ API шақыруларын WMF/EMF GDI шақыруларын сақтайтындай тізбектеп беруге мүмкіндік береді. Сондай-ақ, Windows Metafile-дің Compressed Windows Metafile (WMZ) және Compressed Windows Enhanced Metafile (EMZ) деп аталатын сығылған нұсқалары бар, олар тиісінше gzip арқылы сығылған WMF және EMF файлдары болып табылады.
Қолданылу
WMF форматы кескінді қалпына келтіру үшін Windows GDI қабатымен орындалуға арналған, бірақ WMF бинарлық файлдарында осы кескінді құрайтын GDI графикалық элементтерінің сипаттамасы бар болғандықтан, WMF бинарлық файлдарын көрсетуге немесе оларды басқа графикалық форматтарға түрлендіруге қабілетті балама кітапханаларды жасау мүмкін.