Как отрисовать линии на изображении?

220
26 мая 2018, 04:10

Есть такой скрипт(рисует треугольник по заданным координатам и вставляет его в изображение) -

    int[] xPoints = new int[] { Convert.ToInt32(AX), Convert.ToInt32(BX), Convert.ToInt32(CX) };      
    int[] yPoints = new int[] { Convert.ToInt32(AY), Convert.ToInt32(BY), Convert.ToInt32(CY) };
    int xMin = 0;
    int yMin = 0;
    if(xPoints.Min() < 0)
    {
        xMin = xPoints.Min();
    }
    if(yPoints.Min() < 0)
    {
        yMin = yPoints.Min();
    }
    int height = (yPoints.Max() + (-yMin)) * 100;
    int width = (xPoints.Max() + (-xMin)) * 100;//задаю границы и увеличиваю размеры изображения(что бы не было 6x3 пикселя)
    Image myImage = new Image();
    DrawingVisual drawingVisual = new DrawingVisual();
    DrawingContext drawingContext = drawingVisual.RenderOpen();
    drawingContext.DrawLine(new Pen(Brushes.Green, 1), new Point(CX, CY  ), new Point(BX  , BY  ));
    drawingContext.DrawLine(new Pen(Brushes.Black, 1), new Point(CX, CY  ), new Point(AX  , AY  ));
    drawingContext.DrawLine(new Pen(Brushes.Red, 1), new Point(AX * 300, AY * 300), new Point(BX * 300, BY * 300));

    drawingContext.Close();
    RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 100, 100, PixelFormats.Pbgra32);
    bmp.Render(drawingVisual);
    myImage.Source = bmp;
    MainCanvas.Children.Add(myImage);
    using (FileStream stream = new FileStream("Sample.png", FileMode.Create))
    {
        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bmp));
        encoder.Save(stream);
    }

Рисую линии и вот, что получается -

Почему так получается? На что нужно умножать x, y(при создании Point), чтобы треугольник вписывался ровно в свои границы? И это было универсально, то-есть, если поменяю значения координат, все также будет работать нормально. Еще почему-то линия CB не рисуется. Подозреваю, что из-за того, что она находится на границе изображения. Если я сделаю запредельный размер кисти(2000), то эта линия займет все изображение, а если меньше, то она не рисуется вообще.

READ ALSO
Можно ли улучшить данный класс

Можно ли улучшить данный класс

Имеется сей класс, для копирования UTF8 массива символов в неуправляемую память подобно char**, все ли в нем нормально, и можно ли его улучшить?

199
Ошибка при десериализации из json [дубликат]

Ошибка при десериализации из json [дубликат]

На данный вопрос уже ответили:

227