Russian Qt Forum
Октябрь 06, 2024, 01:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание экранной лупы  (Прочитано 6944 раз)
Crazy Sage
Гость
« : Июль 30, 2012, 18:50 »

Добрый день.
Пытаюсь сделать экранную лупу - есть превьюшка, которое загружено в QGraphicsPixmapItem, есть большое, которое загружается по необходимости, есть QGraphicsScene и QGraphicsView соответственно.

Собственно лупу я делаю следующим образом

Код:
//получаю соответствие точки малого изображения на которой щелкнули и точки большого
QPoint pt_full=displayToPhoto(pt,is_left);
//создаю на основе полного изображения маску, чтобы сделать непрозрачной только область вокруг нужной точки
int zoomRadius=100;
QBitmap mask(fullImage->pixmap().size());
QPainter painter;
painter.begin(&mask);
painter.setBrush(Qt::SolidPattern);
painter.drawEllipse(pt_full,zoomRadius,zoomRadius);
painter.end();
//устанавливаю маску
fullImage.setMask(mask);
fullImageItem->setPixmap(fullImage);
//двигаю превьюшку так, чтобы центр лупы совпал с той точкой, на которой я щелкал
previewItem->setOffset(pt_full-pt);
view->ensureVisible(previewItem,0,0);

И тут появляется два вопроса
1. Я вообще логичный способ выбрал или изобретаю адский велосипед и это можно сделать проще?
2. Высота previewItem в общем случае меньше, чем высота view, поэтому при ensureVisible превьюшка прыгает вверх-вниз по виджету, что очень неудобно. Как сделать так, чтобы она всегда выравнивалась, скажем, по высоте?
Попытка сделать
Код:
QPointF pos=previewItem->scenePos();
QPointF center=QPoint(previewItem->pixmap().width()/2,preview->pixmap().height()/2);
view->centerOn(pos+center);
привела к тому, что view прокручивается куда-то, где превьюшку вообще не видно (видимо я неправильно либо получаю координаты, либо перехожу к ним)
Записан
Bepec
Гость
« Ответ #1 : Июль 31, 2012, 06:45 »

Я бы посоветовал вам посмотреть исходники примера pixeltool.
По сути она тоже экранная лупа.

По идее, если у неё сетку убрать, то будет просто лупа.
Записан
Crazy Sage
Гость
« Ответ #2 : Июль 31, 2012, 07:02 »

Ок, гляну. Этот пример не видел еще.
Записан
Crazy Sage
Гость
« Ответ #3 : Июль 31, 2012, 07:33 »

Посмотрел, не подходит. У меня обязательное условие в двух картинках, потому что это большая исходная фотография и ужатая превьюшка, которая нужна, чтобы не таскать за собой гигабайты фотографий. Поэтому попиксельное увеличение мне не подходит, должно быть видно качество именно исходной фотографии.
Может вырезать как-нибудь из исходной фотографии прямоугольник, который должен перекрывать превьюшку и уже от него оставлять видимым кружок?
Записан
Bepec
Гость
« Ответ #4 : Июль 31, 2012, 07:41 »

Ну так у вас же изображение в памяти. Делайте что хотите - хоть крестики-нолики вырезайте, хоть попиксельно сдвигайте Улыбающийся
Ужимайте и показывайте превьюшку.

PS хотя какой кружок вам нужен я не понял Улыбающийся
Записан
Crazy Sage
Гость
« Ответ #5 : Июль 31, 2012, 07:56 »

Ну в смысле, что на уменьшенном изображении выставляется окружность, внутри которой отображается кусок полноразмерного изображения.
Понятно, что могу делать что хочу)))
Просто сходу не получается, а в графической системе qt пока слабоват, вот и решил проверить, может я велосипед изобретаю.
В общем буду дальше экспериментировать.
Записан
Bepec
Гость
« Ответ #6 : Июль 31, 2012, 08:02 »

Иногда велосипед необходим. Чтобы потом построить машинку Подмигивающий

PS если не жалко, выложи что получилось Улыбающийся В графике я откровенно слабоват, хоть посмотрю со стороны Веселый
Записан
Crazy Sage
Гость
« Ответ #7 : Июль 31, 2012, 08:06 »

Доведу до ума - выложу.
Записан
Bepec
Гость
« Ответ #8 : Июль 31, 2012, 10:54 »

Буду ждать с надеждой.  Показает язык
Записан
Crazy Sage
Гость
« Ответ #9 : Август 09, 2012, 11:34 »

http://cannonfodder.su/pub/Zoom.zip
не сказать, чтобы совсем доведено до ума, но в целом работает
изначально лупы нет, появляется по щелчку
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 21.