Bonjour,

j'ai un fichier WMF que j'arrive à charger et à dessiner sur une winform. Je voudrais choisir la couleur du trait, le type du trait et la couleur du fond de mon dessin sauvegarder au format WMF.

Comment faire ?

Voici mon code tirer des exemples de MSDN :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
 
namespace metafile
{
    public partial class Form1 : Form
    {
        private Metafile metafile1;
        private Graphics.EnumerateMetafileProc metafileDelegate;
        private Point destPoint;
        private Rectangle destRectangle, destRectangle1, destRectangle2, destRectangle3;
 
 
        public Form1()
        {
            InitializeComponent();
 
            metafile1 = new Metafile(@"C:\image.wmf");
            metafileDelegate = new Graphics.EnumerateMetafileProc(MetafileCallback);
            destPoint = new Point(20, 10);
            destRectangle = new Rectangle(20, 10, 100, 100);
            destRectangle1 = new Rectangle(140, 10, 10, 30);
            destRectangle2 = new Rectangle(220, 10, 300, 100);
            destRectangle3 = new Rectangle(520, 10, 300, 700);
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.EnumerateMetafile(metafile1, destRectangle, metafileDelegate);
            e.Graphics.EnumerateMetafile(metafile1, destRectangle1, metafileDelegate);
            e.Graphics.EnumerateMetafile(metafile1, destRectangle2, metafileDelegate);
            e.Graphics.EnumerateMetafile(metafile1, destRectangle3, 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;
        }
 
    }
}