Почему моя EMF в ресурсах преобразуется в растровое изображение? - PullRequest
0 голосов
/ 22 мая 2018

Почему EMF с именем blank.emf в ресурсах в конечном итоге сохраняется как растровое изображение?

private void button1_Click(object sender, EventArgs e)
{
    Metafile emf = null;
    using (var ms = new MemoryStream(Properties.Resources.blank))
    {
        emf = new Metafile(ms);
    }
    emf.Save("C:\\Users\\chrisd\\Documents\\emfbitmap1.emf",
        ImageFormat.Emf);
}

emfbitmap1.emf - это растровое изображение, а не EMF.Я подозреваю, что он преобразуется в растровое изображение при получении из Properties.Resources.Это определенно EMF в файловой системе.

1 Ответ

0 голосов
/ 22 мая 2018

EMF преобразуется в растровое изображение с помощью операции Save.

EMF может быть успешно записана благодаря этому ответу с незначительными изменениями.

using System.Runtime.InteropServices;

включая в класс

    [DllImport("gdi32.dll")]
    internal static extern uint GetEnhMetaFileBits(IntPtr hemf,
        uint cbBuffer, byte[] lpbBuffer);

    [DllImport("gdi32.dll")]
    internal static extern bool DeleteEnhMetaFile(IntPtr hemf);

и изменяя код

private void button1_Click(object sender, EventArgs e)
{
    Metafile emf = null;
    using (var ms = new MemoryStream(Properties.Resources.blank))
    {
        emf = new Metafile(ms);
    }

    IntPtr h = emf.GetHenhmetafile();
    uint size = GetEnhMetaFileBits(h, 0, null);
    byte[] data = new byte[size];
    GetEnhMetaFileBits(h, size, data);
    using (FileStream w = File.
        Create("C:\\Users\\chrisd\\Documents\\emfbitmap1.emf"))
    {
        w.Write(data, 0, (int)size);
    }

    DeleteEnhMetaFile(h);
}

Конечно, если не требуется иметь ЭМП в памяти, его можно записать на дискнепосредственно.Например,

private void button1_Click(object sender, EventArgs e)
{
    File.WriteAllBytes("C:\\Users\\chrisd\\Documents\\emfbitmap1.emf",
        Properties.Resources.blank);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...