| File: System\Drawing\Imaging\MetafileHeader.cs | Web Access |
| Project: src\winforms\src\System.Drawing.Common\src\System.Drawing.Common.csproj (System.Drawing.Common) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.InteropServices; namespace System.Drawing.Imaging; /// <summary> /// Contains attributes of an associated <see cref='Metafile'/>. /// </summary> [StructLayout(LayoutKind.Sequential)] public sealed class MetafileHeader { internal GdiPlus.MetafileHeader _header; internal MetafileHeader() { } /// <summary> /// Gets the type of the associated <see cref='Metafile'/>. /// </summary> public MetafileType Type => (MetafileType)_header.Type; /// <summary> /// Gets the size, in bytes, of the associated <see cref='Metafile'/>. /// </summary> public int MetafileSize => (int)_header.Size; /// <summary> /// Gets the version number of the associated <see cref='Metafile'/>. /// </summary> public int Version => (int)_header.Version; /// <summary> /// Gets the horizontal resolution, in dots-per-inch, of the associated <see cref='Metafile'/>. /// </summary> public float DpiX => _header.DpiX; /// <summary> /// Gets the vertical resolution, in dots-per-inch, of the associated <see cref='Metafile'/>. /// </summary> public float DpiY => _header.DpiY; /// <summary> /// Gets a <see cref='Rectangle'/> that bounds the associated <see cref='Metafile'/>. /// </summary> public Rectangle Bounds => new(_header.X, _header.Y, _header.Width, _header.Height); /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is in the Windows metafile format. /// </summary> public bool IsWmf() => _header.Type is GdiPlus.MetafileType.MetafileTypeWmf or GdiPlus.MetafileType.MetafileTypeWmfPlaceable; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is in the Windows Placeable metafile format. /// </summary> public bool IsWmfPlaceable() => _header.Type is GdiPlus.MetafileType.MetafileTypeWmfPlaceable; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is in the Windows enhanced metafile format. /// </summary> public bool IsEmf() => _header.Type is GdiPlus.MetafileType.MetafileTypeEmf; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is in the Windows enhanced /// metafile format or the Windows enhanced metafile plus. /// </summary> public bool IsEmfOrEmfPlus() => _header.Type is GdiPlus.MetafileType.MetafileTypeEmf or GdiPlus.MetafileType.MetafileTypeEmfPlusOnly or GdiPlus.MetafileType.MetafileTypeEmfPlusDual; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is in the Windows enhanced /// metafile plus format. /// </summary> public bool IsEmfPlus() => _header.Type is GdiPlus.MetafileType.MetafileTypeEmfPlusOnly or GdiPlus.MetafileType.MetafileTypeEmfPlusDual; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is in the Dual enhanced metafile /// format. This format supports both the enhanced and the enhanced plus format. /// </summary> public bool IsEmfPlusDual() => _header.Type is GdiPlus.MetafileType.MetafileTypeEmfPlusDual; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> supports only the Windows /// enhanced metafile plus format. /// </summary> public bool IsEmfPlusOnly() => _header.Type is GdiPlus.MetafileType.MetafileTypeEmfPlusOnly; /// <summary> /// Returns a value indicating whether the associated <see cref='Metafile'/> is device-dependent. /// </summary> public bool IsDisplay() => IsEmfPlus() && ((EmfPlusFlags)_header.EmfPlusFlags).HasFlag(EmfPlusFlags.Display); /// <summary> /// Gets the WMF header file for the associated <see cref='Metafile'/>. /// </summary> public MetaHeader WmfHeader => !IsWmf() ? throw Status.InvalidParameter.GetException() : new(_header.Anonymous.WmfHeader); /// <summary> /// Gets the size, in bytes, of the enhanced metafile plus header file. /// </summary> public int EmfPlusHeaderSize => _header.EmfPlusHeaderSize; /// <summary> /// Gets the logical horizontal resolution, in dots-per-inch, of the associated <see cref='Metafile'/>. /// </summary> public int LogicalDpiX => _header.LogicalDpiX; /// <summary> /// Gets the logical vertical resolution, in dots-per-inch, of the associated <see cref='Metafile'/>. /// </summary> public int LogicalDpiY => _header.LogicalDpiY; }