2014-11-26 5 views
1

рисую простую линию в моем METAFILE как:Как нарисовать в левом верхнем углу METAFILE

var g = CreateGraphics(); 
     var img = new Metafile(path, g.GetHdc()); 
     var ig = Graphics.FromImage(img); 

ig.DrawLine(new Pen(Color.Black, 2), 0, 0, 300, 0); 

и Affter, что я пытаюсь сохранить этот METAFILE как PNG pcture, как это:

var target = new Bitmap(200, 100); 
var g2 = Graphics.FromImage(target); 
g2.DrawImage(source,0,0);// source is my MetaFile 

Но линия не в левом верхнем углу изображения :( Почему и как это сделать

+1

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

спасибо вам, я нашел свой solotion здесь:

var img = new Metafile(path, g.GetHdc(), new Rectangle(0, 0, 101, 101), MetafileFrameUnit.Pixel); 
0

Попробуйте расположени класс Graphics, который вы используете на свой код, прежде чем сохранить его на изображение:

using(Graphics graphics = Graphics.FromImage(metafile)) 
{ 
    graphics.DrawLine(new Pen(Color.Black, 2), 0, 0, 300, 0); 
} // right here in this point, the 'using' keyword launches graphics.Dispose(), 
    // which is very importante when using graphics 
+0

Не забудьте использовать ту же конструкцию в переменной 'g2'. Поскольку он также является объектами GDI, он должен быть удален правильно. – rodrigogq

+0

спасибо за ваше предложение, но мой вопрос здесь о координатах в метафайле :( –

+0

@ LâmÁnh, рисуя метафайлы, 'PhisicalDimension' задается в миллиметрах. После того, как вы вызываете' graphics.Dispose() ', графический флеш все чертежи и должны правильно вычислить координаты. Проверьте документацию [здесь] (http://msdn.microsoft.com/en-us/library/system.drawing.image.physicaldimension (v = vs.110) .aspx) , – rodrigogq

Смежные вопросы