2017-01-23 5 views
0

Я пытаюсь использовать this plugin для C#, который отлично работает. Тем не менее, мне сложно помещать изображение в центр при масштабировании. По умолчанию, при масштабировании, окно изображения фокусируется на верхнем левом углу. Я хотел бы, чтобы он сосредоточился на центре.Как сфокусировать фотокамеру

Любая идея? Я искал по всему миру и не могу найти пример, который делает это внутри этого плагина.

+0

Вы используете 'WinForms' или' WPF'? – Tatranskymedved

+0

@Tatransymedved Winforms – help

+0

Из опубликованной статьи есть 2 варианта: вы можете либо загрузить исходный код и изменить его, так что вы сосредоточите изображение на себе. ИЛИ Вы можете создать обертку для функций масштабирования функций. Как только кнопка будет нажата, вы вызовете масштаб, а затем переместите камеру (изображение) в правильные координаты. – Tatranskymedved

ответ

1

Хорошо, это усложняется, так что я буду писать полный ответ:

Плагин не является открытым в пути можно зацепить на зумирование событий. Фактическая вещь Вы можете сделать (поскольку у вас есть открытые источники), чтобы «взломать» внутри - изменить исходный код и приспособиться к вашим потребностям.

Варианты:

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. Изменить внешний реализация:

Автор является Ussing обертку для внутренней реализации, где он перекинув на события и Вы просто с помощью обернутого объекта (это аналогично нажатию кнопки на мыши вместо того, чтобы соединять 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