2017-01-23 70 views
0

我想爲C#使用this plugin,這很好用。不過,在放大時,我很難將圖像置於中央。默認情況下,無論何時縮放,圖片框都會聚焦在左上角。我希望它專注於中心。如何居中圖片框

有什麼想法?我搜索了很多,並且找不到在這個插件中做這個的例子。

+0

你使用'WinForms'或'WPF'嗎? – Tatranskymedved

+0

@Transranskymedved Winforms – help

+0

從發佈的文章中,有2個選項:您可以下載原始源代碼並對其進行修改,因此您將自己將圖片居中。或者您可以爲函數縮放功能創建包裝。一旦按下按鈕,您將調用放大,然後將相機(圖片)移至正確的座標。 – Tatranskymedved

回答

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.更改外執行:

作者是尤斯包裝器內實現,在那裏他被鉤在事件和你只是用被包裝的對象(這就像按下鼠標的按鈕而不是將1根導線與其他導線連接)。

在文件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 - >一旦這個縮放變化,你將得到一個窗口的大小,並將滾動按鈕移動到中間位置。這可以以任何您需要的方式進行調整。

我相信,原創的作者只想寫ScalablePictureBoxImp只是爲了測試/簡單的情況下添加包裝。如果你自己編寫或調整 - >正確的方式應該使用外部實現,那麼完全取決於你。

+0

我剛剛嘗試過這一點,它似乎已經移動側追蹤器的位置,但不是中心。現在稍微在左上角 – help

+0

如果它有所不同,我在應用程序中按下按鈕時放大了250% – help

+0

請使用邏輯思維和分析,調整值以使它們產生預期結果。 – Tatranskymedved