Использование правильного способа рисования на картинке искажает вывод - PullRequest
0 голосов
/ 19 апреля 2019

Я использую Picturebox в качестве предварительного просмотра. Когда я делал это неправильно, картинка-поле соответствовала распечатке. Когда я изменил его, чтобы использовать растровое изображение, он выглядит плохо. Я проверил DpiX и DpiY графического объекта, и для всех он равен 96. Проблема может быть продемонстрирована с помощью следующего кода. Создайте форму с кнопкой и картинкой. Нажмите на кнопку. Затем раскомментируйте строку "// Correctway = true;" и наблюдай разницу.

public partial class Form1 : Form
{

    private bool Correctway;

    public Form1()
    {
        InitializeComponent();
        button1.Click += Button1_Click;
    }


    private void Button1_Click(Object sender, EventArgs e)
    {
        PrintPageEventArgs eOutput;
        Graphics g;
        string OutputText;
        Font PrintFont;
        Bitmap Output;



        //Correctway = true;
        OutputText = "CERTIFICATION";
        PrintFont = new Font("Arial", 16, FontStyle.Regular);
        Output = new Bitmap(850, 1100);
        if (Correctway)
            g = Graphics.FromImage(Output);
        else
            g = pictureBox1.CreateGraphics();
        eOutput = new PrintPageEventArgs(g, new Rectangle(new Point(25, 25), new Size(new Point(825, 1075))), new Rectangle(new Point(0, 0), new Size(new Point(850, 1100))), new PageSettings());
        eOutput.Graphics.DrawString(OutputText, PrintFont, Brushes.Black, 0, 0);
        eOutput.Graphics.DrawRectangle(Pens.Gray, 20, 30, Output.Width - 100, Output.Height - 130);
        if (Correctway)
            pictureBox1.Image = Output;

    }

}

«Плохой» выход. Хотелось бы описать это лучше, но я не могу понять, что происходит. This is the poor output

Это желаемый вывод, вывод, который является результатом печати, и вывод на экран, когда я использовал неправильную процедуру создания графического объекта из Picturebox. This is the desired output Примечание: я попробовал «Вы также можете нажать CTRL + G, чтобы вставить изображение». Но это не работает. С или без изображения в буфере обмена.

1 Ответ

0 голосов
/ 26 апреля 2019

Тау нашел ответ в своих комментариях.Я публикую это здесь, чтобы завершить этот пост.Решением было использовать g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

public partial class Form1 : Form
{

    private bool Correctway;

    public Form1()
    {
        InitializeComponent();
        button1.Click += Button1_Click;
    }


    private void Button1_Click(Object sender, EventArgs e)
    {
        PrintPageEventArgs eOutput;
        Graphics g;
        string OutputText;
        Font PrintFont;
        Bitmap Output;



        //Correctway = true;
        OutputText = "CERTIFICATION";
        PrintFont = new Font("Arial", 16, FontStyle.Regular);
        Output = new Bitmap(850, 1100);
        if (Correctway)
            g = Graphics.FromImage(Output);
        else
            g = pictureBox1.CreateGraphics();
        eOutput = new PrintPageEventArgs(g, new Rectangle(new Point(25, 25), new Size(new Point(825, 1075))), new Rectangle(new Point(0, 0), new Size(new Point(850, 1100))), new PageSettings());
        eOutput.Graphics.DrawString(OutputText, PrintFont, Brushes.Black, 0, 0);
        eOutput.Graphics.DrawRectangle(Pens.Gray, 20, 30, Output.Width - 100, Output.Height - 130);
        if (Correctway)
            pictureBox1.Image = Output;

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...