메타파일 기록
Image 클래스에서 상속되는 Metafile 클래스를 사용하면 그리기 명령 시퀀스를 기록할 수 있습니다. 기록된 명령은 메모리에 저장하거나, 파일에 저장하거나, 스트림에 저장할 수 있습니다. 메타파일은 벡터 그래픽, 래스터 이미지 및 텍스트를 포함할 수 있습니다.
다음 예제에서는 Metafile 개체를 만듭니다. 이 코드는 Metafile 개체를 사용하여 그래픽 명령 시퀀스를 기록한 다음, 기록된 명령을 SampleMetafile.emf라는 파일에 저장합니다. Metafile 생성자는 디바이스 컨텍스트 핸들을 수신하고 Graphics 생성자는 Metafile 개체의 주소를 받습니다. Graphics 개체가 scope 나가면 녹음/녹화가 중지되고 기록된 명령이 파일에 저장됩니다. 마지막 두 줄의 코드는 새 Graphics 개체를 만들고 Metafile 개체의 주소를 해당 Graphics 개체의 DrawImage 메서드에 전달하여 메타파일을 표시합니다. 코드는 동일한 Metafile 개체를 사용하여 메타파일을 기록하고 표시(재생)합니다.
Metafile metafile(L"SampleMetafile.emf", hdc);
{
Graphics graphics(&metafile);
Pen greenPen(Color(255, 0, 255, 0));
SolidBrush solidBrush(Color(255, 0, 0, 255));
// Add a rectangle and an ellipse to the metafile.
graphics.DrawRectangle(&greenPen, Rect(50, 10, 25, 75));
graphics.DrawEllipse(&greenPen, Rect(100, 10, 25, 75));
// Add an ellipse (drawn with antialiasing) to the metafile.
graphics.SetSmoothingMode(SmoothingModeHighQuality);
graphics.DrawEllipse(&greenPen, Rect(150, 10, 25, 75));
// Add some text (drawn with antialiasing) to the metafile.
FontFamily fontFamily(L"Arial");
Font font(&fontFamily, 24, FontStyleRegular, UnitPixel);
graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
graphics.RotateTransform(30.0f);
graphics.DrawString(L"Smooth Text", 11, &font,
PointF(50.0f, 50.0f), &solidBrush);
} // End of recording metafile.
// Play back the metafile.
Graphics playbackGraphics(hdc);
playbackGraphics.DrawImage(&metafile, 200, 100);
참고
메타파일을 기록하려면 Metafile 개체를 기반으로 Graphics 개체를 생성해야 합니다. 메타파일의 기록은 해당 Graphics 개체가 삭제되거나 scope 종료되면 종료됩니다.
메타파일은 메타파일을 기록하는 데 사용되는 Graphics 개체에 의해 정의된 고유한 그래픽 상태를 포함합니다. 메타파일을 기록하는 동안 설정한 Graphics 개체의 모든 속성(클립 영역, 월드 변환, 다듬기 모드 등)은 메타파일에 저장됩니다. 메타파일을 표시하면 저장된 속성에 따라 드로잉이 수행됩니다.
다음 예제에서는 메타파일을 기록하는 동안 부드러운 모드가 SmoothingModeNormal로 설정되었다고 가정합니다. 재생에 사용되는 Graphics 개체의 스무딩 모드가 SmoothingModeHighQuality로 설정되어 있더라도 메타파일은 SmoothingModeNormal 설정에 따라 재생됩니다. 재생하기 전에 설정된 스무딩 모드가 아니라 중요한 녹음 중에 설정된 스무딩 모드입니다.
graphics.SetSmoothingMode(SmoothingModeHighQuality);
graphics.DrawImage(&meta, 0, 0);