.EMF 파일이란?
**향상된 메타파일 형식(EMF)**은 그래픽 이미지를 장치에 독립적으로 저장합니다. EMF의 메타파일은 모든 출력 장치에서 구문 분석한 후 저장된 이미지를 렌더링할 수 있는 시간순의 가변 길이 레코드로 구성됩니다. 이러한 가변 길이 레코드는 포함된 개체의 정의, 그리기 명령 및 이미지를 정확하게 렌더링하는 데 중요한 그래픽 속성이 될 수 있습니다. 장치가 자체 그래픽 환경을 사용하여 EMF 메타파일을 열 때 원본 이미지의 비율, 치수, 색상 및 기타 그래픽 속성은 여는 장치 플랫폼에 관계없이 동일하게 유지됩니다.
간략한 역사
1990년 Microsoft는 Microsoft Windows용 이미지 파일 형식인 Windows Metafile(WMF)을 설계했습니다. Windows 메타파일은 일부 비트맵 구성 요소를 포함할 수 있는 16비트 형식입니다.WMF는 벡터 그래픽으로 구성될 수 있으며 다른 응용 프로그램 간에 이식성을 유지하기 위한 것입니다. 1993년에 Win32/GDI는 향상된 유연성과 확장성을 갖춘 최신 버전인 EMF(Enhanced Metafile)를 발표했습니다. EMF는 프린터 드라이버를 실행하기 위한 그래픽 언어 명령으로도 사용됩니다. Microsoft는 이제 Windows 형식(WMF)보다 향상된 메타파일 형식(EMF)을 권장합니다. Windows XP가 도입되었을 때 EMF+(Enhanced Metafile Format Plus) 버전이 출시되었습니다. 이 최신 버전은 WMF/EMF가 GDI에 대한 호출을 기록하는 것처럼 GDI+ API 호출을 직렬화하여 방법을 찾습니다. EMZ로 알려진 EMF의 gzip 압축 버전이 있습니다.
EMF 메타파일 형식
다음은 향상된 메타파일 형식의 필수 요소입니다.
- EMR_HEADER (버전, 크기, 생성시 사진의 해상도)
- GDI 개체에 대한 테이블
- 예약된 팔레트(선택 사항)
- 배열 구조로 배열된 메타파일 레코드(속성 설정, 정의된 개체, 그리기 명령)
- EMR_EOF 레코드(EMF 메타파일의 마지막 레코드)
EMF 버전
- 원본: 원본 버전은 원본 이미지를 유지하고 장치와 무관하게 유지하는 데 필요한 기록을 지정합니다. 또한 그래픽 개체 및 그리기 명령이 포함된 레코드를 지원합니다.
- 버전 1: EMF의 두 번째 버전은 픽셀 형식에 대한 기록을 추가하고 OpenGL 명령을 사용할 수 있도록 제공하여 유연성과 장치 독립성을 개선했습니다.
- 버전 2: 세 번째 버전은 장치 표면 거리를 측정하기 위해 미터법 시스템을 추가하여 정확도를 향상시켜 기록의 확장성을 높였습니다.
향상된 메타파일 레코드
메타파일 레코드는 배열 형태로 배열됩니다. 이러한 레코드에는 ENHMETARECORD 구조와 가변 길이가 있습니다. ENHMETARECORD는 향상된 메타파일 형식을 사용하여 그림을 만드는 GDI 함수를 정의하는 데이터를 지정합니다. ENHMETAHEADER 구조는 항상 이 형식의 첫 번째 레코드입니다. 이 EMF 헤더에는 다음 정보가 포함되어 있습니다.
향상된 메타파일의 모든 레코드는 처음에 EMR의 두 구성원(기본 구조 제공)을 갖습니다. 첫 번째 멤버는 레코드 유형을 결정하고 iType으로 알려진 GDI 기능(매개변수는 레코드에 사용됨)을 인식합니다. 다른 멤버 nSize는 각 레코드의 크기를 정의합니다. nSize 바로 아래에 정렬된 나머지 매개변수(있는 경우) 및 추가 데이터. 헤더 바로 다음에 선택적 텍스트 설명이 표시될 수 있습니다. 사진과 저자의 이름은 해당 텍스트 설명에 기록됩니다. 옵션이 있는 팔레트는 향상된 메타파일 생성에 사용되는 색상을 지정합니다. 그림 생성에 필수적인 GDI 기능을 지정하는 데 사용되는 다른 레코드.
각 메타파일에는 최소한 하나의 EMF 레코드가 있어야 합니다. 한 레코드에서 다른 레코드로 이동하는 정보는 EMF 레코드에 종속되므로 이러한 레코드를 인접하게 정렬해야 합니다. EOF_record를 제외한 메타파일의 지정된 레코드에서 해당 특정 레코드의 길이는 다음 레코드로 이동하도록 정의됩니다.
향상된 메타파일 생성
CreateEnhMetaFile 함수는 향상된 메타파일을 만드는 데 사용됩니다. 이 함수 인수는 디스크/메모리에 그림의 크기와 저장에 사용됩니다. 또한, 이 기능은 그림이 가장 먼저 나타난 장치(참조 장치)의 차원과 참조 장치(DC)의 컨텍스트를 요구합니다. 따라서 이 DC를 처리하는 인수는 CreateEnhMetaFile 함수를 호출할 때 제공해야 합니다. 함수의 구문은 다음과 같습니다.
HDC CreateEnhMetaFileExample(
HDC hdc,
LPCSTR lptoFilename,
const OVAL *lprc,
LPCSTR lpDesc
);
HDC: 참조 장치에 대한 핸들입니다.
lptoFilename: 파일 이름에 대한 포인터입니다.
lprc: 타원형 구조에 대한 포인터는 그림 치수를 mm 단위로 지정합니다.
lpDesc: 그림 제목과 그림을 만든 응용 프로그램 이름에 대한 문자열에 대한 포인터입니다.
향상된 메타파일 작업
다음은 향상된 메타파일에 대한 핸들을 사용하여 수행할 수 있는 작업입니다.
- 저장된 사진을 표시하고 편집합니다.
- 향상된 메타파일 복사본을 생성합니다.
- EMF 헤더 사본, 선택적 설명 및 향상된 메타파일의 이진 버전 검색
- 팔레트의 색상을 요약합니다.
그래픽 개체
그리기 및 페인팅 작업에서 그래픽 개체는 개체 생성 기록으로 생성할 수 있으며 나중에 사용하기 위해 저장할 수 있습니다. ‘EMR_SELECTOBJECT’ 레코드는 재생 장치 컨텍스트를 사용하여 이러한 그래픽 개체를 검색할 수 있습니다. 펜, 팔레트, 브러시, 색상 공간, 글꼴 및 스톡 개체는 재사용 가능한 개체 유형입니다.
바이트 순서
리틀 엔디안 형식은 메타파일 레코드에 데이터를 저장하는 데 사용됩니다.
버전 관리
EMF 파일 형식이 두 번 수정되었습니다. 변경된 버전은 원본, 확장 1 및 확장 2입니다. 확장 버전에는 OpenGL 레코드에 대한 조항과 내부 픽셀 형식에 대한 선택적 설명자가 있습니다. 표시된 치수에 대해 밀리미터 단위의 측정 기능이 추가됩니다.