Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public partial class MainForm : Form
- {
- public MainForm()
- {
- InitializeComponent();
- }
- private void MainForm_Paint(object sender, PaintEventArgs e)
- {
- var g = e.Graphics;
- var blueBrush = new SolidBrush(Color.Blue);
- var bluePen = new Pen(blueBrush);
- g.DrawRectangle(bluePen, 0, 0, 200, 200);
- g.DrawLine(bluePen, 100, 0, 100, 200);
- g.DrawLine(bluePen, 0, 100, 200, 100);
- g.DrawString(g.DpiX+" dpi", new Font("Arial", 10), blueBrush, 0, 205);
- Metafile metafile;
- MetafileHeader metafileHeader;
- var size = new Size(200, 200);
- using (var stream = new MemoryStream())
- {
- using (Graphics offScreenBufferGraphics = Graphics.FromHwndInternal(IntPtr.Zero))
- {
- IntPtr deviceContextHandle = offScreenBufferGraphics.GetHdc();
- metafile = new Metafile(stream, deviceContextHandle, new RectangleF(0, 0, size.Width, size.Height), MetafileFrameUnit.Millimeter, EmfType.EmfPlusOnly);
- offScreenBufferGraphics.ReleaseHdc();
- using (Graphics mg = Graphics.FromImage(metafile))
- {
- mg.PageUnit = GraphicsUnit.Millimeter;
- var redPen = new Pen(new SolidBrush(Color.Red));
- // This is how to get the correct scale factor:
- metafileHeader = metafile.GetMetafileHeader();
- float sx = metafileHeader.DpiX/g.DpiX;
- float sy = metafileHeader.DpiY/g.DpiY;
- mg.ScaleTransform(sx, sy);
- mg.DrawLine(redPen, 0, 0, 200, 200);
- mg.DrawLine(redPen, 0, 200, 200, 0);
- }
- }
- }
- g.DrawImage(metafile, 0, 0, 200, 200);
- g.DrawString("metafile.Width: " + metafile.Width, new Font("Arial", 10), blueBrush, 0, 220);
- g.DrawString("metafileHeader.DpiX: " + metafileHeader.DpiX, new Font("Arial", 10), blueBrush, 0, 240);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement