如何将图片框居中

时间:2017-01-23 13:13:51

标签: c# .net image picturebox

我正在尝试将this plugin用于C#,效果很好。但是在放大时我很难将图像置于中心。默认情况下,每当缩放时,图片框都会聚焦在左上角。我希望它专注于中心。

有什么想法吗?我已经搜索了很多,但在这个插件中找不到这样做的例子。

1 个答案:

答案 0 :(得分:1)

好的,这变得复杂,所以我会写完整的答案:

插件未打开您可以挂钩缩放事件。 Actualy你可以做的事情(因为你有开源)就是“破解”内部 - 改变源代码并根据你的需要进行调整。

选项:

<强> 1。改变内部实施:

获取归档ScalablePictureBoxImp.cs,找到方法ScalePictureBoxToFit(),然后在行后面添加代码:

//some previous code
this.pictureBox.Left = left;
this.pictureBox.Top = top;
this.AutoScroll = true;

// add this line under:
this.AutoScrollPosition = new Point(this.Width / 2, this.Height / 2);

现在您可以像以前一样简单地使用该组件,只需在中间调整它们就可以完成所有操作(可能需要更多的数学运算才能正确适应屏幕)。

<强> 2。改变外部实施:

作者正在使用内部实现的包装器,他正在使用包装对象(这就像按下鼠标上的按钮而不是连接其中一些其他的一些)。

在文件ScalablePictureBox.cs中编辑构造函数并添加以下实现:

public ScalablePictureBox()
{
    //some code ...


    this.pictureTracker.ScrollPictureEvent += new PictureTracker.ScrollPictureEventHandler(this.scalablePictureBoxImp.OnScrollPictureEvent);
    this.pictureTracker.PictureTrackerClosed += new PictureTracker.PictureTrackerClosedHandler(this.pictureTracker_PictureTrackerClosed);

    //Enter the line below to hook on event
     this.scalablePictureBoxImp.ZoomRateChangedEvent += ScalablePictureBoxImp_ZoomRateChangedEvent;
}

现在你已经迷上了缩放事件,你只需要调整滚动:

private void ScalablePictureBoxImp_ZoomRateChangedEvent(int zoomRate, bool isFullPictureShown)
{
    this.scalablePictureBoxImp.AutoScrollPosition = new Point(this.Width / 2, this.Height / 2);
}

ScalablePictureBox的内部实现是调用事件ZoomRateChangedEvent - &gt;一旦此缩放发生变化,您将获得窗口大小并将滚动按钮移动到中间位置。这可以通过您需要的任何方式进行调整。

我相信,原来autor只想编写ScalablePictureBoxImp,并且仅为了测试/简单用例而添加了包装器。如果您自己编写或调整,则完全取决于您 - &gt;正确的方法应该是使用外部实现。