Metafile 类

定义

定义图形图元文件。 图元文件包含描述一系列图形操作的记录,这些操作可被记录(构造)和回放(显示)。 此类不能继承。

public ref class Metafile sealed : System::Drawing::Image
public sealed class Metafile : System.Drawing.Image
[System.Serializable]
public sealed class Metafile : System.Drawing.Image
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(false)]
public sealed class Metafile : System.Drawing.Image
type Metafile = class
    inherit Image
[<System.Serializable>]
type Metafile = class
    inherit Image
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(false)>]
type Metafile = class
    inherit Image
Public NotInheritable Class Metafile
Inherits Image
继承
属性

示例

下面的代码示例演示如何创建 Metafile 和使用 PlayRecord 方法。


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.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

注解

使用 Save 方法将图形图像另存为 Windows 图元文件格式 (WMF) 或增强型图元文件格式 (EMF) 文件时,生成的文件将改为保存为可移植网络图形 (PNG) 文件。 出现此行为的原因是,.NET Framework的 GDI+ 组件没有可用于将文件另存为 .wmf 或.emf文件的编码器。

注意

在 .NET 6 及更高版本中, System.Drawing.Common 包(包括此类型)仅在 Windows 操作系统上受支持。 在跨平台应用中使用此类型会导致编译时警告和运行时异常。 有关详细信息,请参阅 仅在 Windows 上支持 System.Drawing.Common

构造函数

Metafile(IntPtr, Boolean)

从指定的图柄初始化 Metafile 类的新实例。

Metafile(IntPtr, EmfType)

从指定的设备上下文图柄和指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(IntPtr, EmfType, String)

从指定的设备上下文图柄和指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 可提供一个字符串来命名该文件。

Metafile(IntPtr, Rectangle)

从指定的设备上下文初始化 Metafile 类的新实例,该实例由指定的矩形绑定。

Metafile(IntPtr, Rectangle, MetafileFrameUnit)

从指定的设备上下文初始化 Metafile 类的新实例,该实例由使用提供的度量单位的指定矩形绑定。

Metafile(IntPtr, Rectangle, MetafileFrameUnit, EmfType)

从指定的设备上下文和指定 Metafile 的格式的 EmfType 枚举初始化 Metafile 类的新实例,该实例由使用提供的度量单位的指定矩形绑定。

Metafile(IntPtr, Rectangle, MetafileFrameUnit, EmfType, String)

从指定的设备上下文和指定 Metafile 的格式的 EmfType 枚举初始化 Metafile 类的新实例,该实例由使用提供的度量单位的指定矩形绑定。 可提供一个字符串来命名该文件。

Metafile(IntPtr, RectangleF)

从指定的设备上下文初始化 Metafile 类的新实例,该实例由指定的矩形绑定。

Metafile(IntPtr, RectangleF, MetafileFrameUnit)

从指定的设备上下文初始化 Metafile 类的新实例,该实例由使用提供的度量单位的指定矩形绑定。

Metafile(IntPtr, RectangleF, MetafileFrameUnit, EmfType)

从指定的设备上下文和指定 Metafile 的格式的 EmfType 枚举初始化 Metafile 类的新实例,该实例由使用提供的度量单位的指定矩形绑定。

Metafile(IntPtr, RectangleF, MetafileFrameUnit, EmfType, String)

从指定的设备上下文和指定 Metafile 的格式的 EmfType 枚举初始化 Metafile 类的新实例,该实例由使用提供的度量单位的指定矩形绑定。 可提供一个字符串来命名该文件。

Metafile(IntPtr, WmfPlaceableFileHeader)

从指定的图柄和 WmfPlaceableFileHeader 初始化 Metafile 类的新实例。

Metafile(IntPtr, WmfPlaceableFileHeader, Boolean)

从指定的图柄和 WmfPlaceableFileHeader 初始化 Metafile 类的新实例。 另外,deleteWmf 参数可用于在删除图元文件时删除图柄。

Metafile(Stream)

从指定的数据流初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr)

从指定的数据流初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, EmfType)

从指定的数据流、设备上下文的 Windows 图柄和指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, EmfType, String)

从指定的数据流、设备上下文的 Windows 图柄和指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 另外,可添加包含新 Metafile 的描述性名称的字符串。

Metafile(Stream, IntPtr, Rectangle)

从指定的数据流、设备上下文的 Windows 图柄和 Rectangle 结构(它表示绑定新 Metafile 的矩形)初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit)

从指定的数据流、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)和所提供的度量单位初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit, EmfType)

从指定的数据流、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit, EmfType, String)

从指定的数据流、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 可添加包含新 Metafile 的描述性名称的字符串。

Metafile(Stream, IntPtr, RectangleF)

从指定的数据流、设备上下文的 Windows 图柄和 RectangleF 结构(它表示绑定新 Metafile 的矩形)初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit)

从指定的数据流、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)和所提供的度量单位初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit, EmfType)

从指定的数据流、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit, EmfType, String)

从指定的数据流、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 可添加包含新 Metafile 的描述性名称的字符串。

Metafile(String)

从指定的文件名初始化 Metafile 类的新实例。

Metafile(String, IntPtr)

使用指定的文件名初始化 Metafile 类的新实例。

Metafile(String, IntPtr, EmfType)

用指定的文件名、设备上下文的 Windows 图柄和指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(String, IntPtr, EmfType, String)

用指定的文件名、设备上下文的 Windows 图柄和指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 还可添加描述性字符串。

Metafile(String, IntPtr, Rectangle)

用指定的文件名、设备上下文的 Windows 图柄和 Rectangle 结构(它表示绑定新 Metafile 的矩形)初始化 Metafile 类的新实例。

Metafile(String, IntPtr, Rectangle, MetafileFrameUnit)

用指定的文件名、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)和所提供的度量单位初始化 Metafile 类的新实例。

Metafile(String, IntPtr, Rectangle, MetafileFrameUnit, EmfType)

用指定的文件名、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(String, IntPtr, Rectangle, MetafileFrameUnit, EmfType, String)

用指定的文件名、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 还可添加描述性字符串。

Metafile(String, IntPtr, Rectangle, MetafileFrameUnit, String)

用指定的文件名、设备上下文的 Windows 图柄、Rectangle 结构(它表示绑定新 Metafile 的矩形)和所提供的度量单位初始化 Metafile 类的新实例。 还可添加描述性字符串。

Metafile(String, IntPtr, RectangleF)

用指定的文件名、设备上下文的 Windows 图柄和 RectangleF 结构(它表示绑定新 Metafile 的矩形)初始化 Metafile 类的新实例。

Metafile(String, IntPtr, RectangleF, MetafileFrameUnit)

用指定的文件名、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)和所提供的度量单位初始化 Metafile 类的新实例。

Metafile(String, IntPtr, RectangleF, MetafileFrameUnit, EmfType)

用指定的文件名、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。

Metafile(String, IntPtr, RectangleF, MetafileFrameUnit, EmfType, String)

用指定的文件名、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)、所提供的度量单位以及指定 Metafile 格式的 EmfType 枚举初始化 Metafile 类的新实例。 还可添加描述性字符串。

Metafile(String, IntPtr, RectangleF, MetafileFrameUnit, String)

用指定的文件名、设备上下文的 Windows 图柄、RectangleF 结构(它表示绑定新 Metafile 的矩形)和所提供的度量单位初始化 Metafile 类的新实例。 还可添加描述性字符串。

属性

Flags

获取该 Image 的像素数据的特性标志。

(继承自 Image)
FrameDimensionsList

获取 GUID 的数组,这些 GUID 表示此 Image 中帧的维数。

(继承自 Image)
Height

获取此 Image 的高度(以像素为单位)。

(继承自 Image)
HorizontalResolution

获取此 Image 的水平分辨率(以“像素/英寸”为单位)。

(继承自 Image)
Palette

获取或设置用于此 Image 的调色板。

(继承自 Image)
PhysicalDimension

获取此图像的宽度和高度。

(继承自 Image)
PixelFormat

获取此 Image 的像素格式。

(继承自 Image)
PropertyIdList

获取存储于该 Image 中的属性项的 ID。

(继承自 Image)
PropertyItems

获取存储于该 Image 中的所有属性项(元数据片)。

(继承自 Image)
RawFormat

获取此 Image 的文件格式。

(继承自 Image)
Size

获取此图像的宽度和高度(以像素为单位)。

(继承自 Image)
Tag

获取或设置提供有关图像的附加数据的对象。

(继承自 Image)
VerticalResolution

获取此 Image 的垂直分辨率(以“像素/英寸”为单位)。

(继承自 Image)
Width

获取此 Image 的宽度(以像素为单位)。

(继承自 Image)

方法

Clone()

创建此 Image 的一个精确副本。

(继承自 Image)
CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
Dispose()

释放此 Image 使用的所有资源。

(继承自 Image)
Dispose(Boolean)

释放由 Image 占用的非托管资源,还可以另外再释放托管资源。

(继承自 Image)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetBounds(GraphicsUnit)

以指定的单位获取图像的界限。

(继承自 Image)
GetEncoderParameterList(Guid)

返回有关指定的图像编码器所支持的参数的信息。

(继承自 Image)
GetFrameCount(FrameDimension)

返回指定维度的帧数。

(继承自 Image)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetHenhmetafile()

返回增强型 Metafile 的 Windows 图柄。

GetLifetimeService()
已过时.

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetMetafileHeader()

返回与此 MetafileHeader 关联的 Metafile

GetMetafileHeader(IntPtr)

返回与指定 Metafile 关联的 MetafileHeader

GetMetafileHeader(IntPtr, WmfPlaceableFileHeader)

返回与指定 Metafile 关联的 MetafileHeader

GetMetafileHeader(Stream)

返回与指定 Metafile 关联的 MetafileHeader

GetMetafileHeader(String)

返回与指定 Metafile 关联的 MetafileHeader

GetPropertyItem(Int32)

从该 Image 获取指定的属性项。

(继承自 Image)
GetThumbnailImage(Int32, Int32, Image+GetThumbnailImageAbort, IntPtr)

返回此 Image 的缩略图。

(继承自 Image)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializeLifetimeService()
已过时.

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
PlayRecord(EmfPlusRecordType, Int32, Int32, Byte[])

播放单个图元文件记录。

RemovePropertyItem(Int32)

从该 Image 移除指定的属性项。

(继承自 Image)
RotateFlip(RotateFlipType)

旋转、翻转或者同时旋转和翻转 Image

(继承自 Image)
Save(Stream, ImageCodecInfo, EncoderParameters)

使用指定的编码器和图像编码器参数,将该图像保存到指定的流。

(继承自 Image)
Save(Stream, ImageFormat)

将此图像以指定的格式保存到指定的流中。

(继承自 Image)
Save(String)

将该 Image 保存到指定的文件或流。

(继承自 Image)
Save(String, ImageCodecInfo, EncoderParameters)

使用指定的编码器和图像编码器参数,将该 Image 保存到指定的文件。

(继承自 Image)
Save(String, ImageFormat)

将此 Image 以指定格式保存到指定文件。

(继承自 Image)
SaveAdd(EncoderParameters)

将帧添加到上次对 Save 方法调用时所指定的文件或流中。 使用此方法将多帧图像中的选定帧保存到另一个多帧图像。

(继承自 Image)
SaveAdd(Image, EncoderParameters)

将帧添加到上次对 Save 方法调用时所指定的文件或流中。

(继承自 Image)
SelectActiveFrame(FrameDimension, Int32)

选择由维度和索引指定的帧。

(继承自 Image)
SetPropertyItem(PropertyItem)

在此 Image 中存储一个属性项(元数据片)。

(继承自 Image)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

使用将目标对象序列化所需的数据填充 SerializationInfo

(继承自 Image)

适用于