Ich arbeite an einem Projekt, wo ich ständig Bitmaps bekommen und sie auf einer Picturebox zeichnen muss.C# benutzerdefinierte Picturebox Kontrolle
Die Idee besteht darin, eine erste anfängliche Bitmap zu zeichnen, dann den Rest der Bitmap abzurufen und sie über die ursprüngliche zu zeichnen. (Die erste wird immer noch in der Bildbox angezeigt, also möchte ich sie auf die erste Bitmap zeichnen).
Ich habe versucht, ein benutzerdefiniertes Steuerelement zu entwerfen, das OnPaint
Ereignis zu implementieren, aber das zweite Mal das Ereignis ausgelöst wird, zeichnet es die zweite block
und verbirgt vollständig das Bild, das zuvor gezeichnet wurde.
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.
}
Ich bin mir nicht sicher, was im Code falsch ist. Ich benutze die e
EventArgs, um einen neuen Block zu zeichnen, wann immer ich brauche, aber es scheint, dass die neue Zeichnung die vorherige Bitmap vollständig verbirgt.
Sie markiert haben 'Shlomi's' als akzeptierte Antwort beantworten. Wie behebt das dein Problem? Jedes Bild, das Sie mit einem Grafikobjekt zeichnen, erhalten Sie mit pictureBox1.CreateGraphics() wird sofort gelöscht, ohne es erneut in der überschriebenen OnPaint-Methode neu zu zeichnen. –
@ user12572 nein, ohne ein benutzerdefiniertes Steuerelement, wenn ich nur Picturebox verwenden und ein Grafikobjekt daraus erstellen würde, würde es auf dem aktuellen Bild zeichnen.Sie können für sich selbst sehen, am wenigsten hier zeichne ich nur einen Block jedes Mal und nicht das ganze Bild. – Slashy
Verstanden! Sie müssen also das zweite Bild wiederholt zeichnen, aber nicht das erste Bild zeichnen. Nice :) –