我正在尝试在图片框中正确放大/缩小图像。我有这个代码。
private Image GridMap;
private double ZoomFactor = 1;
protected override void OnMouseWheel(MouseEventArgs e)
{
if (e.Delta > 0)
{
ZoomFactor*=1.2;
}
else if (e.Delta < 0 && ZoomFactor >1 )
{
ZoomFactor /= 1.2;
}
Size newSize = new Size((int)(GridMap.Width * ZoomFactor), (int)(GridMap.Height * ZoomFactor));
Bitmap bmp = new Bitmap(GridMap, newSize);
MainGrid.Image = bmp;
}
其中主网格是我想缩放的图片框。
这段代码有效,但滚动后很慢 我等待 1-2 秒,然后它显示缩放后的图片。 带有 (800,800( 图像。这是非常慢的。
我想我知道为什么。它的复制调整了位图的大小,而不是仅使用旧位图的一部分,但我不知道该怎么做。
如何使其平滑缩放?
好的 最后我想通了...我需要的是剪掉我的位图最终代码的一部分>
protected override void OnMouseWheel(MouseEventArgs e)
{
if (e.Delta > 0 && ZoomFactor >MaxZoom)
{
ZoomFactor-=0.01;
}
else if (e.Delta < 0 && ZoomFactor <1 )
{
ZoomFactor += 0.01;
}
Rectangle srcRect = new Rectangle(0, 0, (int)(GridMap.Width * ZoomFactor), (int)(GridMap.Height * ZoomFactor));
Bitmap cropped = ((Bitmap)GridMap).Clone(srcRect, MainGrid.Image.PixelFormat);
MainGrid.Image = cropped;
}
并加上PictureBox的启动
this.MainGrid.SizeMode = PictureBoxSizeMode.Zoom;