我正在尝试将this plugin用于C#,效果很好。但是在放大时我很难将图像置于中心。默认情况下,每当缩放时,图片框都会聚焦在左上角。我希望它专注于中心。
有什么想法吗?我已经搜索了很多,但在这个插件中找不到这样做的例子。
答案 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;正确的方法应该是使用外部实现。