<PackageReference Include="System.Drawing.Common" Version="10.0.0-preview.6.25358.103" />

Metafile

public sealed class Metafile : Image, IPointer<GpMetafile>
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.
using System.ComponentModel; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using Windows.Win32; using Windows.Win32.Foundation; using Windows.Win32.Graphics.Gdi; using Windows.Win32.Graphics.GdiPlus; using Windows.Win32.System.Com; namespace System.Drawing.Imaging { [Serializable] [NullableContext(1)] [Nullable(0)] [Editor("System.Drawing.Design.MetafileEditor, System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] [TypeForwardedFrom("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] public sealed class Metafile : Image, IPointer<GpMetafile> { private const int MaxPath = 260; unsafe IntPtr IPointer<GpMetafile>.Pointer { get { return (IntPtr)this.Pointer(); } } public unsafe Metafile(IntPtr hmetafile, WmfPlaceableFileHeader wmfHeader, bool deleteWmf) { fixed (global::Windows.Win32.Graphics.GdiPlus.WmfPlaceableFileHeader* wmfPlaceableFileHeader = &wmfHeader._header) { GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipCreateMetafileFromWmf((HMETAFILE)hmetafile, deleteWmf, wmfPlaceableFileHeader, &nativeImage).ThrowIfFailed(); SetNativeImage((GpImage*)nativeImage); } } public unsafe Metafile(IntPtr henhmetafile, bool deleteEmf) { GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipCreateMetafileFromEmf((HENHMETAFILE)henhmetafile, deleteEmf, &nativeImage).ThrowIfFailed(); SetNativeImage((GpImage*)nativeImage); } public unsafe Metafile(string filename) { Path.GetFullPath(filename); IntPtr value; if (filename == null) value = (IntPtr)(void*)null; else { ref reference = ref filename.GetPinnableReference(); value = (IntPtr)(&reference); } GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipCreateMetafileFromFile((char*)(long)value, &nativeImage).ThrowIfFailed(); SetNativeImage((GpImage*)nativeImage); ref reference = ref *(char*)null; } public Metafile(IntPtr referenceHdc, Rectangle frameRect) : this(referenceHdc, frameRect, MetafileFrameUnit.GdiCompatible) { } public Metafile(IntPtr referenceHdc, EmfType emfType) : this(referenceHdc, emfType, null) { } public Metafile(IntPtr referenceHdc, RectangleF frameRect) : this(referenceHdc, frameRect, MetafileFrameUnit.GdiCompatible) { } public Metafile(IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit) : this(referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual) { } public Metafile(IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type) : this(referenceHdc, frameRect, frameUnit, type, null) { } [NullableContext(2)] public unsafe Metafile(IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string description) { RectF rectF = frameRect; IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference); } char* value = (char*)(long)intPtr; GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipRecordMetafile((HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, &rectF, (global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit)frameUnit, value, &nativeImage).ThrowIfFailed(); ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } public Metafile(IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit) : this(referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual) { } public Metafile(IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type) : this(referenceHdc, frameRect, frameUnit, type, null) { } public Metafile(string fileName, IntPtr referenceHdc) : this(fileName, referenceHdc, EmfType.EmfPlusDual, null) { } public Metafile(string fileName, IntPtr referenceHdc, EmfType type) : this(fileName, referenceHdc, type, null) { } public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect) : this(fileName, referenceHdc, frameRect, MetafileFrameUnit.GdiCompatible) { } public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit) : this(fileName, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual) { } public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type) : this(fileName, referenceHdc, frameRect, frameUnit, type, null) { } public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, [Nullable(2)] string desc) : this(fileName, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual, desc) { } public unsafe Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, [Nullable(2)] string description) { Path.GetFullPath(fileName); if (fileName.Length > 260) throw new PathTooLongException(); RectF rectF = frameRect; IntPtr value; if (fileName == null) value = (IntPtr)(void*)null; else { ref reference = ref fileName.GetPinnableReference(); value = (IntPtr)(&reference); } IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference2 = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference2); } char* value2 = (char*)(long)intPtr; GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipRecordMetafileFileName((char*)(long)value, (HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, &rectF, (global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit)frameUnit, value2, &nativeImage).ThrowIfFailed(); ref reference2 = ref *(char*)null; ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect) : this(fileName, referenceHdc, frameRect, MetafileFrameUnit.GdiCompatible) { } public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit) : this(fileName, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual) { } public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type) : this(fileName, referenceHdc, frameRect, frameUnit, type, null) { } public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, [Nullable(2)] string description) : this(fileName, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual, description) { } public Metafile(Stream stream, IntPtr referenceHdc) : this(stream, referenceHdc, EmfType.EmfPlusDual, null) { } public Metafile(Stream stream, IntPtr referenceHdc, EmfType type) : this(stream, referenceHdc, type, null) { } public Metafile(Stream stream, IntPtr referenceHdc, RectangleF frameRect) : this(stream, referenceHdc, frameRect, MetafileFrameUnit.GdiCompatible) { } public Metafile(Stream stream, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit) : this(stream, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual) { } public Metafile(Stream stream, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type) : this(stream, referenceHdc, frameRect, frameUnit, type, null) { } public Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect) : this(stream, referenceHdc, frameRect, MetafileFrameUnit.GdiCompatible) { } public Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit) : this(stream, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual) { } public Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type) : this(stream, referenceHdc, frameRect, frameUnit, type, null) { } public Metafile(IntPtr hmetafile, WmfPlaceableFileHeader wmfHeader) : this(hmetafile, wmfHeader, false) { } public unsafe Metafile(Stream stream) { ArgumentNullException.ThrowIfNull(stream, "stream"); ComScope<IStream> scope = stream.ToIStream(true); try { GpMetafile* nativeImage = null; PInvokeGdiPlus.GdipCreateMetafileFromStream((IStream*)ref scope, &nativeImage).ThrowIfFailed(); SetNativeImage((GpImage*)nativeImage); } finally { scope.Dispose(); } } [NullableContext(2)] public unsafe Metafile(IntPtr referenceHdc, EmfType emfType, string description) { IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference); } char* value = (char*)(long)intPtr; GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipRecordMetafile((HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)emfType, null, global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit.MetafileFrameUnitGdi, value, &nativeImage).ThrowIfFailed(); ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } [NullableContext(2)] public unsafe Metafile(IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string desc) { RectF rectF = (RectangleF)frameRect; IntPtr intPtr; if (desc == null) intPtr = (IntPtr)(void*)null; else { ref reference = ref desc.GetPinnableReference(); intPtr = (IntPtr)(&reference); } char* value = (char*)(long)intPtr; GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipRecordMetafile((HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, (RectF*)(long)(frameRect.IsEmpty ? ((IntPtr)(void*)null) : ((IntPtr)(&rectF))), (global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit)frameUnit, value, &nativeImage).ThrowIfFailed(); ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } public unsafe Metafile(string fileName, IntPtr referenceHdc, EmfType type, [Nullable(2)] string description) { Path.GetFullPath(fileName); IntPtr value; if (fileName == null) value = (IntPtr)(void*)null; else { ref reference = ref fileName.GetPinnableReference(); value = (IntPtr)(&reference); } IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference2 = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference2); } char* value2 = (char*)(long)intPtr; GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipRecordMetafileFileName((char*)(long)value, (HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, null, global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit.MetafileFrameUnitGdi, value2, &nativeImage).ThrowIfFailed(); ref reference2 = ref *(char*)null; ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } public unsafe Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, [Nullable(2)] string description) { Path.GetFullPath(fileName); RectF rectF = (RectangleF)frameRect; IntPtr value; if (fileName == null) value = (IntPtr)(void*)null; else { ref reference = ref fileName.GetPinnableReference(); value = (IntPtr)(&reference); } IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference2 = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference2); } char* value2 = (char*)(long)intPtr; GpMetafile* nativeImage = default(GpMetafile*); PInvokeGdiPlus.GdipRecordMetafileFileName((char*)(long)value, (HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, (RectF*)(long)(frameRect.IsEmpty ? ((IntPtr)(void*)null) : ((IntPtr)(&rectF))), (global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit)frameUnit, value2, &nativeImage).ThrowIfFailed(); ref reference2 = ref *(char*)null; ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } public unsafe Metafile(Stream stream, IntPtr referenceHdc, EmfType type, [Nullable(2)] string description) { ArgumentNullException.ThrowIfNull(stream, "stream"); ComScope<IStream> scope = stream.ToIStream(true); try { GpMetafile* nativeImage = null; IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference); } char* value = (char*)(long)intPtr; PInvokeGdiPlus.GdipRecordMetafileStream((IStream*)ref scope, (HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, null, global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit.MetafileFrameUnitGdi, value, &nativeImage).ThrowIfFailed(); ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } finally { scope.Dispose(); } } public unsafe Metafile(Stream stream, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, [Nullable(2)] string description) { ArgumentNullException.ThrowIfNull(stream, "stream"); ComScope<IStream> scope = stream.ToIStream(true); try { GpMetafile* nativeImage = null; IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference); } char* value = (char*)(long)intPtr; RectF rectF = frameRect; PInvokeGdiPlus.GdipRecordMetafileStream((IStream*)ref scope, (HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, &rectF, (global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit)frameUnit, value, &nativeImage).ThrowIfFailed(); ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } finally { scope.Dispose(); } } public unsafe Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, [Nullable(2)] string description) { ArgumentNullException.ThrowIfNull(stream, "stream"); ComScope<IStream> scope = stream.ToIStream(true); try { GpMetafile* nativeImage = null; IntPtr intPtr; if (description == null) intPtr = (IntPtr)(void*)null; else { ref reference = ref description.GetPinnableReference(); intPtr = (IntPtr)(&reference); } char* value = (char*)(long)intPtr; RectF rectF = (RectangleF)frameRect; PInvokeGdiPlus.GdipRecordMetafileStream((IStream*)ref scope, (HDC)referenceHdc, (global::Windows.Win32.Graphics.GdiPlus.EmfType)type, (RectF*)(long)(frameRect.IsEmpty ? ((IntPtr)(void*)null) : ((IntPtr)(&rectF))), (global::Windows.Win32.Graphics.GdiPlus.MetafileFrameUnit)frameUnit, value, &nativeImage).ThrowIfFailed(); ref reference = ref *(char*)null; SetNativeImage((GpImage*)nativeImage); } finally { scope.Dispose(); } } private Metafile(SerializationInfo info, StreamingContext context) : base(info, context) { } internal unsafe Metafile(IntPtr ptr) { SetNativeImage((GpImage*)(long)ptr); } public unsafe void PlayRecord(EmfPlusRecordType recordType, int flags, int dataSize, byte[] data) { fixed (byte* data2 = data) { PInvokeGdiPlus.GdipPlayMetafileRecord(this.Pointer(), (global::Windows.Win32.Graphics.GdiPlus.EmfPlusRecordType)recordType, (uint)flags, (uint)dataSize, data2).ThrowIfFailed(); GC.KeepAlive(this); } } public unsafe static MetafileHeader GetMetafileHeader(IntPtr hmetafile, WmfPlaceableFileHeader wmfHeader) { MetafileHeader metafileHeader = new MetafileHeader(); fixed (global::Windows.Win32.Graphics.GdiPlus.MetafileHeader* header = &metafileHeader._header) { fixed (global::Windows.Win32.Graphics.GdiPlus.WmfPlaceableFileHeader* wmfPlaceableFileHeader = &wmfHeader._header) { PInvokeGdiPlus.GdipGetMetafileHeaderFromWmf((HMETAFILE)hmetafile, wmfPlaceableFileHeader, header).ThrowIfFailed(); return metafileHeader; } } } public unsafe static MetafileHeader GetMetafileHeader(IntPtr henhmetafile) { MetafileHeader metafileHeader = new MetafileHeader(); fixed (global::Windows.Win32.Graphics.GdiPlus.MetafileHeader* header = &metafileHeader._header) { PInvokeGdiPlus.GdipGetMetafileHeaderFromEmf((HENHMETAFILE)henhmetafile, header).ThrowIfFailed(); return metafileHeader; } } public unsafe static MetafileHeader GetMetafileHeader(string fileName) { Path.GetFullPath(fileName); MetafileHeader metafileHeader = new MetafileHeader(); IntPtr intPtr; if (fileName == null) intPtr = (IntPtr)(void*)null; else { ref pinnableReference = ref fileName.GetPinnableReference(); intPtr = (IntPtr)(&pinnableReference); } char* value = (char*)(long)intPtr; fixed (global::Windows.Win32.Graphics.GdiPlus.MetafileHeader* header = &metafileHeader._header) { PInvokeGdiPlus.GdipGetMetafileHeaderFromFile(value, header).ThrowIfFailed(); return metafileHeader; } } public unsafe static MetafileHeader GetMetafileHeader(Stream stream) { ArgumentNullException.ThrowIfNull(stream, "stream"); MetafileHeader metafileHeader = new MetafileHeader(); fixed (global::Windows.Win32.Graphics.GdiPlus.MetafileHeader* header = &metafileHeader._header) { ComScope<IStream> scope = stream.ToIStream(true); try { PInvokeGdiPlus.GdipGetMetafileHeaderFromStream((IStream*)ref scope, header).ThrowIfFailed(); return metafileHeader; } finally { scope.Dispose(); } } } public unsafe MetafileHeader GetMetafileHeader() { MetafileHeader metafileHeader = new MetafileHeader(); fixed (global::Windows.Win32.Graphics.GdiPlus.MetafileHeader* header = &metafileHeader._header) { PInvokeGdiPlus.GdipGetMetafileHeaderFromMetafile(this.Pointer(), header).ThrowIfFailed(); GC.KeepAlive(this); return metafileHeader; } } public IntPtr GetHenhmetafile() { return this.GetHENHMETAFILE(); } } }