Вопрос, который у меня есть здесь, является своего рода 2 частью.
У меня есть изображение, которое расположено внутри панели. Когда я открываю изображение, размер изображения изменяется в соответствии с размером изображения, а размер панели остается прежним. На панели есть только полосы прокрутки, чтобы увидеть все изображение.
Есть 2 вещи, которые идут не так с этим.
Когда я изменяю размер изображения, по какой-то причине я могу рисовать только в предыдущей части изображения. Бывший. Imagebox по умолчанию начинается с размера 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");
}
}
Большое спасибо!