0
我在這裏的問題是一個2分的。在Panel-Panel裏面繪製圖片框#
我有一個位於面板內的圖片框。當我打開圖片時,圖片框的大小將調整爲圖片的大小,而面板的大小保持不變。該面板只有滾動條來查看整個圖像。
有兩件事情會出錯。
當我調整PictureBox的,由於某種原因,我只能畫在圖片框的前面部分。防爆。圖像框默認開始爲200x200。我打開一個500x400的圖像。而且我仍然只能畫出圖像的200x200部分。
我遇到的第二個問題是,當我在畫箱的選擇部分繪畫時,當我滾動到畫面不在視線的位置,然後回來時,我畫的圖像就消失了。我知道我需要某種
picturebox.invalidate()
。我只是不知道如何使用它。
這裏是我的代碼,以便更好地理解我在做什麼。
public Form1()
{
InitializeComponent();
DrawArea = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
pictureBox1.Image = DrawArea;
objGraphics = this.pictureBox1.CreateGraphics();
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
drawImage(e);
}
public void drawImage(MouseEventArgs e)
{
Rectangle rDraw = new Rectangle();
if (e.Button == MouseButtons.Left)
{
rDraw.X = e.X;
rDraw.Y = e.Y;
rDraw.Width = 3;
rDraw.Height = 3;
objGraphics.DrawEllipse(System.Drawing.Pens.Black, rDraw);
}
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.jpg; *.bmp)|*.jpg; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap bit = new Bitmap(open.FileName);
pictureBox1.Size = bit.Size;
DrawArea = bit;
pictureBox1.Image = bit;
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
非常感謝!
我到底該怎麼做。我有繪畫事件,但我不確定如何使用事件精確繪製。 – Johnrad
在e.Graphics上繪製。繪畫事件可以被多次觸發(例如,如果您滾動)。爲了強制它重繪,'無效()'它。 – SLaks
對不起,太天真了。我會重載繪畫事件正確?從我的mouse_move事件傳遞它? – Johnrad