Я работаю над проектом, где мне нужно постоянно получать растровые изображения и рисовать их на картинке.C# пользовательский контроль изображения
Идея состоит в том, чтобы нарисовать первую начальную растровую карту, затем извлечь оставшуюся часть растрового изображения и нарисовать их над начальным. (Первый, который все еще отображается в окне изображения, поэтому я хочу нарисовать их на первом растровом изображении).
Я попытался создать пользовательский элемент управления, чтобы реализовать событие OnPaint
, но во второй раз, когда событие запущено, оно рисует второй block
и полностью скрывает изображение, которое было нарисовано ранее.
public class RapidPictureBox: PictureBox
{
public pictureBox1Control()
{
SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.ResizeRedraw, true);
}
public Bitmap block = null;
public int x = 0, y = 0;
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(block, x, y);
}
}
private void Form1_Load(object sender, EventArgs e)
{
RapidPictureBox pictureBox1 = new RapidPictureBox();
pictureBox1.Dock = DockStyle.Fill;
Controls.Add(pictureBox1);
pictureBox1.block = new Bitmap("3.png"); //first initial image
pictureBox1.block = new Bitmap("2.png"); //draw on the initial one.
}
Я не уверен, что не так в коде. Я использую EventArgs e
для рисования нового блока каждый раз, когда мне нужно, но кажется, что новый чертеж полностью скрывает предыдущее растровое изображение.
Вы отметили 'Shlomi's' ответ в качестве принятого ответа. Как это устраняет вашу проблему? Любое изображение, которое вы рисуете с помощью графического объекта, вы получаете с помощью pictureBox1.CreateGraphics() будет немедленно очищен, не перерисовывая его снова в переопределенном методе OnPaint. –
@ user12572 no, без пользовательского элемента управления, если я просто использую picturebox и создаю из него графический объект, он будет рисовать поверх текущего изображения. Вы можете видеть сами. По крайней мере, здесь я всего лишь рисую один блок каждый раз а не весь образ. – Slashy
Получил! Поэтому вам нужно рисовать второе изображение повторно, но не нужно рисовать первое изображение. Nice :) –