在我的代码中我使用鼠标滚轮调整pictureBox中的图像大小。
void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
CalculateNewSizeFactor(e.Delta);
if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
pictureBox1.Image = null;
pictureBox1.Image = ResizeImage(new Size((int)(img.Width * factor), (int)(img.Height * factor)));
}
public Image ResizeImage(Size size)
{
return new Bitmap(img, size);
}
private void CalculateNewSizeFactor(int delta)
{
if (delta > 0 && factor < 2)
{
factor *= increment;
}
else if (delta < 0 && factor > 0.25)
{
factor /= increment;
}
}
现在我添加了一个新的复选框,所以如果选中它我可以在pictureBox内拖动图像:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
panning = true;
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (checkBox1.Checked)
{
panning = true;
}
startingPoint = new Point(e.Location.X - movingPoint.X,
e.Location.Y - movingPoint.Y);
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
panning = false;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (panning)
{
e.Graphics.Clear(Color.White);
e.Graphics.DrawImage(img, movingPoint);
}
}
存在一些问题:
当我在PictureBox1区域内移动鼠标后,当我选中复选框时,它会捕获并拖动图像,我希望只有当我左键单击鼠标时才能执行此操作。
如果我首先使用鼠标滚轮并使图像尺寸更小或更大,然后尝试拖动它一次我点击图像拖动它(鼠标向下)或当我离开它(鼠标向上)图像将其大小改回其ogirinal大小。我希望它保持在我拖动它时用鼠标滚轮改变它的大小。
我如何解决这两个问题?
答案 0 :(得分:0)
当您选中复选框时设置平移模式 - 只需摆脱该处理程序 - 就这样。因为您在mouseDown处理程序中也设置了平移模式 - 基于checkBox状态。
当您绘制图片框时,您正在绘制img,这可能是(原始)您的原始图像。所以只需将调整后的图像保存在某处并重新绘制。