Metafile 클래스
그래픽 메타파일을 정의합니다. 메타파일에는 기록(생성) 및 재생(표시)할 수 있는 그래픽 작업 시퀀스를 설명하는 레코드가 들어 있습니다. 이 클래스는 상속될 수 없습니다.
네임스페이스: System.Drawing.Imaging
어셈블리: System.Drawing(system.drawing.dll)
구문
‘선언
<SerializableAttribute> _
Public NotInheritable Class Metafile
Inherits Image
‘사용 방법
Dim instance As Metafile
[SerializableAttribute]
public sealed class Metafile : Image
[SerializableAttribute]
public ref class Metafile sealed : public Image
/** @attribute SerializableAttribute() */
public final class Metafile extends Image
SerializableAttribute
public final class Metafile extends Image
설명
Save 메서드를 사용하여 그래픽 이미지를 WMF(Windows 메타파일 형식) 또는 EMF(확장 메타파일 형식) 파일로 저장하는 경우 생성되는 파일은 PNG(Portable Network Graphics) 파일로 대신 저장됩니다. 이러한 현상은 .NET Framework의 GDI+ 구성 요소에 파일을 .wmf 또는 .emf 파일로 저장하는 데 사용할 수 있는 인코더가 없기 때문에 발생합니다.
예제
다음 코드 예제에서는 Metafile을 만들고 PlayRecord 메서드를 사용하는 방법을 보여 줍니다.
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
' for Marshal.Copy
Imports System.Runtime.InteropServices
Public Class Form1
Inherits Form
Private metafile1 As Metafile
Private metafileDelegate As Graphics.EnumerateMetafileProc
Private destPoint As Point
Public Sub New()
metafile1 = New Metafile("C:\test.wmf")
metafileDelegate = New Graphics.EnumerateMetafileProc(AddressOf MetafileCallback)
destPoint = New Point(20, 10)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
e.Graphics.EnumerateMetafile(metafile1, destPoint, metafileDelegate)
End Sub
Private Function MetafileCallback(ByVal recordType As _
EmfPlusRecordType, ByVal flags As Integer, ByVal dataSize As Integer, _
ByVal data As IntPtr, ByVal callbackData As PlayRecordCallback) As Boolean
Dim dataArray As Byte() = Nothing
If data <> IntPtr.Zero Then
' Copy the unmanaged record to a managed byte buffer
' that can be used by PlayRecord.
dataArray = New Byte(dataSize) {}
Marshal.Copy(data, dataArray, 0, dataSize)
End If
metafile1.PlayRecord(recordType, flags, dataSize, dataArray)
Return True
End Function
Shared Sub Main()
Application.Run(New Form1())
End Sub
End Class
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
// for Marshal.Copy
using System.Runtime.InteropServices;
public class Form1 : Form
{
private Metafile metafile1;
private Graphics.EnumerateMetafileProc metafileDelegate;
private Point destPoint;
public Form1()
{
metafile1 = new Metafile(@"C:\Test.wmf");
metafileDelegate = new Graphics.EnumerateMetafileProc(MetafileCallback);
destPoint = new Point(20, 10);
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.EnumerateMetafile(metafile1, destPoint, metafileDelegate);
}
private bool MetafileCallback(
EmfPlusRecordType recordType,
int flags,
int dataSize,
IntPtr data,
PlayRecordCallback callbackData)
{
byte[] dataArray = null;
if (data != IntPtr.Zero)
{
// Copy the unmanaged record to a managed byte buffer
// that can be used by PlayRecord.
dataArray = new byte[dataSize];
Marshal.Copy(data, dataArray, 0, dataSize);
}
metafile1.PlayRecord(recordType, flags, dataSize, dataArray);
return true;
}
static void Main()
{
Application.Run(new Form1());
}
}
상속 계층 구조
System.Object
System.MarshalByRefObject
System.Drawing.Image
System.Drawing.Imaging.Metafile
스레드로부터의 안전성
이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
플랫폼
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원