none
Metafile после отрисовки изменяет размер RRS feed

  • Вопрос

  • Здравствуйте. такой вопрос.

    берем изображение System.Drawing.Imaging.Metafile .  У него width=549.

    начинаем отрисовывать. Для интереса вверху рисунка рисуем прямоугольник с такой же шириной( аля линейка)

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                System.Drawing.Imaging.Metafile img = picts[0];
                e.Graphics.DrawImage(picts[0], new Point(0, 0));
                System.Drawing.Rectangle a = new Rectangle(0, 0, img.Width, 50);
                System.Drawing.Pen b =new Pen(Color.Blue,20);
                e.Graphics.DrawRectangle(b, a);
            }

    После отрисовки прямоугольник по ширине меньше почти в 2 раза, чем рисунок(хотя у него задавалась ширина=ширине изображения). сам рисунок по ощущениям в ширину занимает около 800 пикселей. как это получается?

    и 2 вопрос, раз уж вдруг работали с векторными изображениями. 
    есть файл wmf. мне нужно открыть его в моей программе и выделить определенные части. тут лучше их закрасить прямоугольником определенного цвета, как в примере выше или можно как то через класс Metafile, поправить изображение(увы с комп. графикой дела не имел).

    заранее спасибо  за ответ.

    25 ноября 2014 г. 9:49

Все ответы

  • А как Вы создавали метафайл? Конкретно, на основании чего Вы решили, что его ширина 549? И в каких это единицах измерения? Дело в том, что GDI+ умеет оперировать разными единицами (пикселями, дюймами, миллиметрами и пр.).

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 ноября 2014 г. 12:20
  • Тут скорей всего проблема с разрешениями DPI. Вероятно, нужно использовать перегруженную версию метода DrawImage с явным указание GraphicsUnit.

    Нужно поизучать, что выдают свойства HorizontalResolution, PhysicalDimension и метод GetBounds (с разными параметрами).

    25 ноября 2014 г. 12:32
  • метафайл скажем так  я беру из базы( из другого приложения и как он делается, не известно)

    " Конкретно, на основании чего Вы решили, что его ширина 549?"

    Свойство width у класса metafile.

    25 ноября 2014 г. 14:51
  • А если не рисовать на PitureBox, а просто задать его свойство Image, тогда какой эффект будет? При этом SizeМode, естественно, должно быть Normal.

    И еще, размер карандаша, которым рисуется прямоугольник, я бы поставил = 1, если нужно четко отследить размеры.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 ноября 2014 г. 15:27
  • По поводу второго Вашего вопроса. Можно создать объект Graphics, передав конструктору в параметре объект метафайла, и рисовать в этом Graphics-е все, что угодно. Эти операции должны дописаться в объект метафайла (но не в файл на диске, разумеется). Собственно, так метафайлы и создаются.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа kosuke904 14 января 2015 г. 5:54
    • Отменено предложение в качестве ответа kosuke904 5 февраля 2015 г. 19:53
    • Предложено в качестве ответа kosuke904 5 февраля 2015 г. 19:53
    25 ноября 2014 г. 15:41