Metafile Class
Definition
Defines a graphic metafile. A metafile contains records that describe a sequence of graphics operations that can be recorded (constructed) and played back (displayed). This class is not inheritable.
public sealed class Metafile : System.Drawing.Image
- Inheritance
Inherited Members
System.Drawing.Image
System.MarshalByRefObject
System.Object
Examples
The following code example demonstrates how to create a Metafile and use the PlayRecord method.
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());
}
}
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
Remarks
When you use the Save method to save a graphic image as a Windows Metafile Format (WMF) or Enhanced Metafile Format (EMF) file, the resulting file is saved as a Portable Network Graphics (PNG) file instead. This behavior occurs because the GDI+ component of the .NET Framework does not have an encoder that you can use to save files as .wmf or .emf files.
Constructors
| Metafile(Stream) |
Initializes a new instance of the Metafile class from the specified data stream. |
| Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, and the supplied unit of measure. |
| Metafile(String, IntPtr, EmfType, String) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, and an EmfType enumeration that specifies the format of the Metafile. A descriptive string can be added, as well. |
| Metafile(String, IntPtr, Rectangle, MetafileFrameUnit) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, and the supplied unit of measure. |
| Metafile(String, IntPtr, RectangleF, MetafileFrameUnit) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, and the supplied unit of measure. |
| Metafile(IntPtr, Rectangle, MetafileFrameUnit, EmfType, String) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle that uses the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. A string can be provided to name the file. |
| Metafile(IntPtr, RectangleF, MetafileFrameUnit, EmfType, String) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle that uses the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. A string can be provided to name the file. |
| Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit, EmfType) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(Stream, IntPtr, EmfType, String) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, and an EmfType enumeration that specifies the format of the Metafile. Also, a string that contains a descriptive name for the new Metafile can be added. |
| Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit, EmfType) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(String, IntPtr, Rectangle, MetafileFrameUnit, String) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, and the supplied unit of measure. A descriptive string can also be added. |
| Metafile(String, IntPtr, RectangleF, MetafileFrameUnit, EmfType) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(String, IntPtr, RectangleF, MetafileFrameUnit, String) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, and the supplied unit of measure. A descriptive string can also be added. |
| Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit, EmfType, String) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. A string that contains a descriptive name for the new Metafile can be added. |
| Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit, EmfType, String) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. A string that contains a descriptive name for the new Metafile can be added. |
| Metafile(String, IntPtr, Rectangle, MetafileFrameUnit, EmfType, String) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. A descriptive string can also be added. |
| Metafile(String, IntPtr, RectangleF, MetafileFrameUnit, EmfType, String) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a RectangleF structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. A descriptive string can also be added. |
| Metafile(String, IntPtr, Rectangle, MetafileFrameUnit, EmfType) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(IntPtr, RectangleF, MetafileFrameUnit, EmfType) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle that uses the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, a Rectangle structure that represents the rectangle that bounds the new Metafile, and the supplied unit of measure. |
| Metafile(String, IntPtr, RectangleF) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, and a RectangleF structure that represents the rectangle that bounds the new Metafile. |
| Metafile(String) |
Initializes a new instance of the Metafile class from the specified file name. |
| Metafile(IntPtr, Boolean) |
Initializes a new instance of the Metafile class from the specified handle. |
| Metafile(IntPtr, EmfType) |
Initializes a new instance of the Metafile class from the specified handle to a device context and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(IntPtr, WmfPlaceableFileHeader) |
Initializes a new instance of the Metafile class from the specified handle and a WmfPlaceableFileHeader. |
| Metafile(IntPtr, Rectangle) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle. |
| Metafile(IntPtr, RectangleF) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle. |
| Metafile(IntPtr, Rectangle, MetafileFrameUnit, EmfType) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle that uses the supplied unit of measure, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(String, IntPtr) |
Initializes a new instance of the Metafile class with the specified file name. |
| Metafile(IntPtr, EmfType, String) |
Initializes a new instance of the Metafile class from the specified handle to a device context and an EmfType enumeration that specifies the format of the Metafile. A string can be supplied to name the file. |
| Metafile(Stream, IntPtr) |
Initializes a new instance of the Metafile class from the specified data stream. |
| Metafile(IntPtr, Rectangle, MetafileFrameUnit) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle that uses the supplied unit of measure. |
| Metafile(IntPtr, RectangleF, MetafileFrameUnit) |
Initializes a new instance of the Metafile class from the specified device context, bounded by the specified rectangle that uses the supplied unit of measure. |
| Metafile(Stream, IntPtr, EmfType) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(Stream, IntPtr, Rectangle) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, and a Rectangle structure that represents the rectangle that bounds the new Metafile. |
| Metafile(Stream, IntPtr, RectangleF) |
Initializes a new instance of the Metafile class from the specified data stream, a Windows handle to a device context, and a RectangleF structure that represents the rectangle that bounds the new Metafile. |
| Metafile(String, IntPtr, EmfType) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, and an EmfType enumeration that specifies the format of the Metafile. |
| Metafile(String, IntPtr, Rectangle) |
Initializes a new instance of the Metafile class with the specified file name, a Windows handle to a device context, and a Rectangle structure that represents the rectangle that bounds the new Metafile. |
| Metafile(IntPtr, WmfPlaceableFileHeader, Boolean) |
Initializes a new instance of the Metafile class from the specified handle and a WmfPlaceableFileHeader. Also, the |
Methods
| GetHenhmetafile() |
Returns a Windows handle to an enhanced Metafile. |
| GetMetafileHeader(IntPtr, WmfPlaceableFileHeader) |
Returns the MetafileHeader associated with the specified Metafile. |
| GetMetafileHeader() |
Returns the MetafileHeader associated with this Metafile. |
| GetMetafileHeader(IntPtr) |
Returns the MetafileHeader associated with the specified Metafile. |
| GetMetafileHeader(Stream) |
Returns the MetafileHeader associated with the specified Metafile. |
| GetMetafileHeader(String) |
Returns the MetafileHeader associated with the specified Metafile. |
| PlayRecord(EmfPlusRecordType, Int32, Int32, Byte[]) |
Plays an individual metafile record. |