Freigeben über


Metafile-Klasse

Definiert eine grafische Metadatei. Eine Metadatei enthält Datensätze, die eine Folge von Grafikoperationen beschreiben, die aufgezeichnet (erstellt) und wiedergegeben (angezeigt) werden können. Diese Klasse kann nicht geerbt werden.

Namespace: System.Drawing.Imaging
Assembly: System.Drawing (in system.drawing.dll)

Syntax

'Declaration
<SerializableAttribute> _
Public NotInheritable Class Metafile
    Inherits Image
'Usage
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

Hinweise

Wenn Sie eine Grafik mithilfe der Save-Methode im Metadateiformat (WMF – Windows Metafile Format) oder erweiterten Metadateiformat (EMF – Enhanced Metafile Format) von Windows speichern, wird die Datei stattdessen als PNG-Datei (Portable Network Graphics) gespeichert. Dieses Verhalten tritt auf, weil die GDI+-Komponente von .NET Framework über keinen Encoder verfügt, mit dem Dateien als WMF- oder EMF-Datei gespeichert werden können.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie Metafile erstellt und die PlayRecord-Methode verwendet wird.

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());
    }
}

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
     System.Drawing.Image
      System.Drawing.Imaging.Metafile

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

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 unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

Metafile-Member
System.Drawing.Imaging-Namespace