Metafile 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
定義圖形中繼檔 (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 Metafile Format (WMF) 或增強元檔格式 (EMF) 檔案時,產生的檔案會改為儲存為可攜式網路圖形 (PNG) 檔案。 發生此行為的原因是,.NET Framework 的 GDI+ 元件沒有可用來將檔案儲存為 .wmf 或.emf檔案的編碼器。
注意
在 .NET 6 和更新版本中,只有 Windows 作業系統才支援包含此類型的 System.Drawing.Common 套件。 在跨平臺應用程式中使用此類型會導致編譯時間警告和運行時間例外狀況。 如需詳細資訊,請參閱 僅限 Windows 上支援的 System.Drawing.Common。
建構函式
屬性
Flags |
取得這個 Image 之像素資料的屬性旗標。 (繼承來源 Image) |
FrameDimensionsList |
取得 GUID 的陣列,表示這個 Image 中的框架 (Frame) 維度 (Dimension)。 (繼承來源 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) |
方法
明確介面實作
ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
將序列化目標物件所需的資料填入 SerializationInfo。 (繼承來源 Image) |