Поделиться через


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-файл. Это происходит потому, что компонент GDI+ платформа .NET Framework не имеет кодировщика, который можно использовать для сохранения файлов в формате WMF или .emf.

Примечание

В .NET 6 и более поздних версиях пакет System.Drawing.Common, включающий этот тип, поддерживается только в операционных системах Windows. Использование этого типа в кроссплатформенных приложениях вызывает предупреждения во время компиляции и исключения во время выполнения. Дополнительные сведения см . в статье System.Drawing.Common, поддерживаемая только в Windows.

Конструкторы

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)

Инициализация нового экземпляра класса Metafile из указанного дескриптора и заголовка WmfPlaceableFileHeader.

Metafile(IntPtr, WmfPlaceableFileHeader, Boolean)

Инициализация нового экземпляра класса Metafile из указанного дескриптора и заголовка WmfPlaceableFileHeader. Также для удаления дескриптора при удалении метафайла можно использовать параметр deleteWmf.

Metafile(Stream)

Инициализирует новый экземпляр класса Metafile из указанного потока данных.

Metafile(Stream, IntPtr)

Инициализирует новый экземпляр класса Metafile из указанного потока данных.

Metafile(Stream, IntPtr, EmfType)

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства и перечисления EmfType, определяющего формат Metafile.

Metafile(Stream, IntPtr, EmfType, String)

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства и перечисления EmfType, определяющего формат Metafile. Также может быть добавлена строка, содержащая описательное имя нового объекта Metafile.

Metafile(Stream, IntPtr, Rectangle)

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства и структуры Rectangle, определяющей прямоугольник, ограничивающий новый объект Metafile.

Metafile(Stream, IntPtr, Rectangle, MetafileFrameUnit)

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства и структуры Rectangle, которая определяет прямоугольник, ограничивающий новый объект Metafile, и предоставленных единиц измерения.

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

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства, структуры Rectangle, определяющей прямоугольник, ограничивающий новый объект Metafile, предоставленных единиц измерения и перечисления EmfType, определяющего формат Metafile.

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

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства, структуры Rectangle, определяющей прямоугольник, ограничивающий новый объект Metafile, предоставленных единиц измерения и перечисления EmfType, определяющего формат Metafile. Также может быть добавлена строка, содержащая описательное имя нового объекта Metafile.

Metafile(Stream, IntPtr, RectangleF)

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства и структуры RectangleF, определяющей прямоугольник, ограничивающий новый объект Metafile.

Metafile(Stream, IntPtr, RectangleF, MetafileFrameUnit)

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства и структуры RectangleF, которая определяет прямоугольник, ограничивающий новый объект Metafile, и предоставленных единиц измерения.

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

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства, структуры RectangleF, определяющей прямоугольник, ограничивающий новый объект Metafile, предоставленных единиц измерения и перечисления EmfType, определяющего формат Metafile.

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

Инициализация нового экземпляра класса Metafile из указанного потока данных, дескриптора Windows контекста устройства, структуры RectangleF, определяющей прямоугольник, ограничивающий новый объект Metafile, предоставленных единиц измерения и перечисления EmfType, определяющего формат Metafile. Также может быть добавлена строка, содержащая описательное имя нового объекта Metafile.

Metafile(String)

Инициализирует новый экземпляр класса Metafile из указанного имени файла.

Metafile(String, IntPtr)

Инициализирует новый экземпляр класса Metafile c указанным именем файла.

Metafile(String, IntPtr, EmfType)

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и перечислением EmfType, определяющим формат Metafile.

Metafile(String, IntPtr, EmfType, String)

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и перечислением EmfType, определяющим формат Metafile. Также может быть добавлена описательная строка.

Metafile(String, IntPtr, Rectangle)

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и структурой Rectangle, которая определяет прямоугольник, ограничивающий новый объект Metafile.

Metafile(String, IntPtr, Rectangle, MetafileFrameUnit)

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и структурой Rectangle, которая определяет прямоугольник, ограничивающий новый объект Metafile, а также заданными единицами измерения.

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

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства, структурой Rectangle, которая определяет прямоугольник, ограничивающий новый объект Metafile, заданными единицами измерения и перечислением EmfType, определяющим формат Metafile.

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

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства, структурой Rectangle, которая определяет прямоугольник, ограничивающий новый объект Metafile, заданными единицами измерения и перечислением EmfType, определяющим формат Metafile. Также может быть добавлена описательная строка.

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

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и структурой Rectangle, которая определяет прямоугольник, ограничивающий новый объект Metafile, а также заданными единицами измерения. Также может быть добавлена описательная строка.

Metafile(String, IntPtr, RectangleF)

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и структурой RectangleF, которая определяет прямоугольник, ограничивающий новый объект Metafile.

Metafile(String, IntPtr, RectangleF, MetafileFrameUnit)

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и структурой RectangleF, которая определяет прямоугольник, ограничивающий новый объект Metafile, а также заданными единицами измерения.

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

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства, структурой RectangleF, которая определяет прямоугольник, ограничивающий новый объект Metafile, заданными единицами измерения и перечислением EmfType, определяющим формат Metafile.

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

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства, структурой RectangleF, которая определяет прямоугольник, ограничивающий новый объект Metafile, заданными единицами измерения и перечислением EmfType, определяющим формат Metafile. Также может быть добавлена описательная строка.

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

Инициализация нового экземпляра класса Metafile указанным именем файла, дескриптором Windows контекста устройства и структурой RectangleF, которая определяет прямоугольник, ограничивающий новый объект Metafile, а также заданными единицами измерения. Также может быть добавлена описательная строка.

Свойства

Flags

Возвращает флаги атрибутов для пиксельных данных этого объекта Image.

(Унаследовано от Image)
FrameDimensionsList

Возвращает массив идентификаторов GUID, представляющих размеры кадров в объекте Image.

(Унаследовано от Image)
Height

Возвращает высоту объекта Image в пикселях.

(Унаследовано от Image)
HorizontalResolution

Возвращает горизонтальное разрешение объекта Image в пикселях на дюйм.

(Унаследовано от Image)
Palette

Возвращает или задает палитру цветов, используемую для объекта Image.

(Унаследовано от Image)
PhysicalDimension

Возвращает ширину и высоту данного изображения.

(Унаследовано от Image)
PixelFormat

Возвращает формат пикселей для этого объекта Image.

(Унаследовано от Image)
PropertyIdList

Возвращает идентификаторы элементов свойств, хранящихся в объекте Image.

(Унаследовано от 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()

Возвращает дескриптор Windows расширенного объекта Metafile.

GetLifetimeService()
Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetMetafileHeader()

Возвращает рабочую область метаданных MetafileHeader, связанную с соединением Metafile.

GetMetafileHeader(IntPtr)

Возвращает объект MetafileHeader, связанный с заданным объектом Metafile.

GetMetafileHeader(IntPtr, WmfPlaceableFileHeader)

Возвращает объект MetafileHeader, связанный с заданным объектом Metafile.

GetMetafileHeader(Stream)

Возвращает объект MetafileHeader, связанный с заданным объектом Metafile.

GetMetafileHeader(String)

Возвращает объект MetafileHeader, связанный с заданным объектом Metafile.

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)

Применяется к