我在一個項目中工作,我需要不斷地獲取位圖並在一個圖片框上繪製它們。C#自定義圖片框控件
這個想法是繪製第一個初始位圖,然後回顧位圖的其餘部分,並將它們繪製在初始位圖之上。 (第一個仍然顯示在picturebox中,所以我想在第一個位圖上繪製它們)。
我試圖設計一個自定義控件來實現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.
}
我不確定代碼中出了什麼問題。我使用e
EventArgs在我需要的時候繪製一個新塊,但看起來新的繪圖很難隱藏以前的位圖。
。那怎麼解決你的問題?您使用pictureBox1使用圖形對象繪製的任何圖像。CreateGraphics()將立即被擦除,而不會在OnPaint重寫方法中再次重繪。 –
@ user12572不,沒有自定義控件,如果我只是使用picturebox並從它創建一個圖形對象,它會繪製在當前圖像的頂部。你可以看到自己。至少在這裏,我只繪製一個塊每日而不是整個圖像。 – Slashy
Got it!因此,您需要重複繪製第二張圖像,但不需要繪製第一張圖像。很好:) –