PictureBox Windows Forms с масштабированием и панорамированием - PullRequest
1 голос
/ 09 апреля 2010

Мое приложение нуждается в управлении отображением растровых изображений (jpg), а также масштабированием и панорамированием (поэтому, если вы нажмете кнопку мыши, вы сможете «переместить» увеличенное изображение внутри кадра)

То, что я сделал, поместило панель в форму, затем на внутреннюю панель pictureBox (закрепленный сверху, слева).
Поэтому, если мне нужно увеличить его, я просто выполняю приведенный ниже код из событий кнопок масштабирования:

    private void ZommInOut(bool zoom) {
        int zoomRatio   = 10; // percent
        int widthZoom   = pBox.Width * zoomRatio /100;
        int heightZoom  = pBox.Height  * zoomRatio /100;

        if (zoom) {
            widthZoom   *= -1;
            heightZoom  *= -1;
        }

        pBox.Width  += widthZoom;
        pBox.Height += heightZoom;
    }

Хорошо работает. Изображение увеличено, панель с полосами прокрутки - так у меня работает простая функция панорамирования.

Что мне не хватает, так это возможность использовать мышь для панорамирования - Я бы хотел перетащить картинку в любом направлении, чтобы увидеть другую ее часть (как, например, в Acrobat Reader).
Я искал способ использовать событие MouseMove и изменять полосы прокрутки программно, но я не смог этого сделать.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

Вам необходимо установить свойство AutoScrollPosition в событии MouseMove.

Вам нужно будет отслеживать местоположение события MouseDown и обновлять AutoScrollPosition, используя смещение.

0 голосов
/ 09 апреля 2010

Я бы предложил создать элемент управления и рисовать часть изображения с помощью Graphics.DrawImage - таким образом, вы можете контролировать масштаб изображения (трилинейный и т. Д.), А также использовать меньше памяти. Вы можете переопределить OnMouseMove, чтобы получить движения mosue

...