none
VS2008, DrawLine RRS feed

  • Вопрос

  • Добрый день

    Есть код на C# для обработки OnPaint

    g.ResetTransform();

    float xd = (float)-ShiftViewX;

    float yd = (float)ShiftViewY;

    g.TranslateTransform(xd, yd);

    g.RotateTransform((float)RotateAngle_);

    ....

    g.DrawLine(pen, .......);

    g.DrawLine(pen, p1, p2);

     

    При выполнении последнего метода возникает OutOfMemory, при RotateAngle_ = 145 градусов

    значения X Y переменных p1, p2 немногим больше или меньше 0.

    При выполнении метода g.DrawImage - такой ошибки нет.

    Не понятно, как обойти эту проблему ?

    Спасибо

    16 сентября 2011 г. 20:05

Ответы

  • Не думаю что проблема в DrawLine.

    Вот код, ничего не вылетает:

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication127
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            protected override void OnPaint(PaintEventArgs e)
            {
                float ShiftViewX = 200;
                float ShiftViewY = 200;
                float RotateAngle_ = 145;
                Graphics g = e.Graphics;
                Pen pen = Pens.Black;
                Point p1 = new Point(10, 10);
                Point p2 = new Point(-10, +10);
                //
                g.ResetTransform();
                float xd = (float)ShiftViewX;
                float yd = (float)ShiftViewY;
                g.TranslateTransform(xd, yd);
                g.RotateTransform((float)RotateAngle_);
                g.DrawLine(pen, p1, p2);
    
            }
        }
    }
    
    

    • Помечено в качестве ответа Abolmasov Dmitry 19 сентября 2011 г. 11:39
    17 сентября 2011 г. 6:07
    Отвечающий

Все ответы

  • Не думаю что проблема в DrawLine.

    Вот код, ничего не вылетает:

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication127
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            protected override void OnPaint(PaintEventArgs e)
            {
                float ShiftViewX = 200;
                float ShiftViewY = 200;
                float RotateAngle_ = 145;
                Graphics g = e.Graphics;
                Pen pen = Pens.Black;
                Point p1 = new Point(10, 10);
                Point p2 = new Point(-10, +10);
                //
                g.ResetTransform();
                float xd = (float)ShiftViewX;
                float yd = (float)ShiftViewY;
                g.TranslateTransform(xd, yd);
                g.RotateTransform((float)RotateAngle_);
                g.DrawLine(pen, p1, p2);
    
            }
        }
    }
    
    

    • Помечено в качестве ответа Abolmasov Dmitry 19 сентября 2011 г. 11:39
    17 сентября 2011 г. 6:07
    Отвечающий
  • Уважаемый пользователь, пожалуйста, не забудьте отметить сообщение или сообщения, которые являются решением вашей проблемы, даже если это ваше собстевенное сообщение. Это можно сделать с помощью кнопки 'Пометить как ответ', которая есть под каждым сообщением.

    Спасибо.


    Для связи [mail]
    18 сентября 2011 г. 7:26