Как мне перекрасить мою коробку с картинками, когда картинка исчезнет? - PullRequest
0 голосов
/ 16 апреля 2019

Я не знаю, как перекрасить мою картинку. Это просто демонстрация. Производственный код слишком трудоемкий, чтобы поместить его в событие рисования. Что мне нужно, так это способ захвата изображения, нарисованного в pucturebox, с помощью графических методов, чтобы я мог быстро перекрасить его при необходимости.

Вот демоверсия:

public partial class Form1 : Form
{

    Image Outout;


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


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


        OutputText = "CERTIFICATION";
        PrintFont = new Font("Arial", 16, FontStyle.Bold);
        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);
        Outout = pictureBox1.Image;
        pictureBox1.Paint += PictureBox1_Paint;

    }


    private void PictureBox1_Paint(object sender, PaintEventArgs e)
    {
        pictureBox1.Image = Outout;
    }
}

1 Ответ

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

Спасибо, TaW, за то, что указал мне правильное направление.Приведенный мною пример взят из системы ERP, и в реальной задаче используется более десятка объектов, а графика - из многостраничного отчета.Таким образом, рисование в событии рисования не будет работать.Во-первых, бессмысленно вести список вещей для рисования, поскольку ВСЕ должно быть нарисовано при изменении номера детали.Кроме того, генератор отчетов должен запускаться дважды: первый раз только для расчета количества страниц и второй раз для фактического рисования страниц.Также я не могу использовать PrintPreview PrintDocument из-за его ограничений.Но вы были в курсе использования Graphics g = Graphics.FromImage(bmp).Это то, что мне было нужно.

@ LarsTech, вы правы, это странное использование PrintPageEventArgs.Это просто побочный эффект, когда проблема, встроенная в пару событий и несколько объектов, должна быть уменьшена в форме, чтобы представить представление проблемы.Если его уменьшить слишком мало, предлагаемые решения не масштабируются, следовательно, не работают.Если оно недостаточно сокращено, может быть трудно понять реальную проблему, так как люди будут предлагать решения различных аспектов, некоторые из которых являются искусственными из-за уменьшения проблемы.

ОТВЕТ

Рисование на графике, созданной картинкой, не было постоянным.Однако рисование на растровом изображении работало идеально, как это было предложено TaW.Спасибо за вашу помощь!

        PrintPageEventArgs eOutput;
        Graphics g;
        string OutputText;
        Font PrintFont;
        Bitmap Output;




        OutputText = "CERTIFICATION";
        PrintFont = new Font("Times New Roman", 24, FontStyle.Regular);
        Output = new Bitmap(850, 1100);
        g = Graphics.FromImage(Output);
        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);
        pictureBox1.Image = Output;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...