在form1的顶部我做了:
double increment = 25;
然后:
void pictureBox1_MouseHover(object sender, EventArgs e)
{
pictureBox1.Focus();
}
void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
double factor = 1.0;
if (e.Delta > 0)
factor += (increment / 100.0);
else
factor -= (increment / 100.0);
pictureBox1.Image = resizeImage(pictureBox1.Image, new Size((int)(pictureBox1.Image.Width * factor), (int)(pictureBox1.Image.Height * factor)));
}
public static Image resizeImage(Image imgToResize, Size size)
{
return (Image)(new Bitmap(imgToResize, size));
}
它的工作但有两个问题:
如果您将尺寸增加25%,然后减少25%,则无法恢复您开始使用的尺寸。例如,100 + 25%= 125,125 -25%= 94(因为100的25%是25,但125的25%是31)。通过如何增加/减少呢?我如何将其限制为最小和最大尺寸?
如果我不断增加和减小尺寸,图片迟早会变形。我该如何避免这种情况?
答案 0 :(得分:1)
用乘法/除法(1 * 1.25 = 1.25,1.25 / 1.25 = 1)代替加法/减法,例如:
double increment = 1.25;
double factor = 1.0;
if (e.Delta > 0)
factor *= increment;
else
factor /= increment;
问题是您是基于先前生成的图像而不是原始图像生成图像的新版本。如果降低某些图片的分辨率,则会丢失一些信息。这是一个单向的过程。换句话说,你不能减少图像然后增加它,并期望结果与原始图像相同。我认为你应该始终将原始图像传递给resizeImage方法。原始图像可以存储在一个字段中,也可以每次从资源或文件中读取。
在将新图像分配给 pictureBox1.Image 之前,您应该处理旧图像。
答案 1 :(得分:0)
您可能需要考虑在鼠标悬停时显示不同的较大版本的图像,而不是放大相同的图像。