C # как нарисовать линию шириной в один пиксель

#c# #graphics

#c# #графика

Вопрос:

я пытаюсь нарисовать линию на форме:

 protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Graphics g;

        g = e.Graphics;
        g.PageUnit = GraphicsUnit.Pixel;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;

        Pen myPen = new Pen(Color.Red);
        myPen.Width = 1;
        g.DrawLine(myPen, 100, 50, 200, 50);

        g.DrawLine(myPen, 150, 0, 150, 100);
    }
  

это выглядит так: введите описание изображения здесь но после увеличения это выглядит так:введите описание изображения здесь — ширина линии составляет 3 пикселя…

мой вопрос: как нарисовать линию шириной в один пиксель?

хорошо — я отредактировал ее, но теперь она выглядит так (при увеличении):введите описание изображения здесь (без pageunit выглядит так же)

Комментарии:

1. C # — это язык, вы не можете рисовать линии на языке, для этого вам нужна графическая библиотека для рендеринга на экране или объект изображения для рендеринга. Ответ будет сильно отличаться в зависимости от вашего назначения рендеринга, с вашими текущими тегами и описанием на вопрос невозможно ответить.

2. При попытке использовать приведенный выше пример линии кажутся нарисованными без сглаживания. Кроме того, нет черного фона. Можете ли вы предоставить минимальный пример воспроизведения, который работает?

3. хорошо, 1 отредактировал ее, но не работает…

4. Вам нужно отключить сглаживание. Посмотрите графику и свойства пера (!!) Перо — довольно удивительный зверь и по умолчанию соединяет не пиксели, а точки (между пикселями)

Ответ №1:

То, что вы ищете, — это использовать следующее перед всеми вашими вызовами рисования:

 g.SmoothingMode = SmoothingMode.None;
  

хотя пример в вашем вопросе не может быть воспроизведен.

Комментарии:

1. спасибо за ответ — я отредактировал свой пример (sory), но все еще не woking…

2. Где этот обработчик событий OnPaint? В каком компоненте? Кроме того, как вы ее максимизируете (масштабируете)? Используете ли вы какое-либо программное обеспечение?

3. я просто переопределяю метод OnPaint, и я смотрю на printscreen в paint (пиксель за пикселем), но на экране я тоже это вижу (прямо на очень большом мониторе)

4. К сожалению, я не могу ее воспроизвести.

5. я знаю причину — я использовал настройки масштабирования Windows sreeen DPI (150%), когда я отключаю его, ширина линии составляет 1 пиксель — спасибо за помощь