Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: PulSar.CE3194694 от Февраль 07, 2013, 14:05



Название: Запись всего, что видно на экране, в картинку
Отправлено: PulSar.CE3194694 от Февраль 07, 2013, 14:05
Добрый день.
Подскажите, пожалуйста, вот что. В программе есть несколько виджетов, который отображаются на экране. В этих виджетах находятся картинки, которые рисует пейнтер. Как сделать, чтобы то, что я вижу в окне программы, сохранилось как изображение на жесткий диск?
Вот я создал QPixmap, указал его во всех моих виджетах в качестве paintDevice, для каждого виджета вызвал метод update() или repaint() и сохранил через метод save(). Изображение-то сохраняется, но на нем нет части виджетов (точнее всех кроме последнего). Если я правильно понимаю, то каждый раз, когда вызываю update(), то он заново перерисовывает изображение, а не рисует поверх старого. Если это так, то как сделать правильно?


Название: Re: Запись всего, что видно на экране, в картинку
Отправлено: Bepec от Февраль 07, 2013, 14:14
Ты каждый раз его перерисовываешь. Т.е. сначала рисуешь первый. Потом рисуешь второй. Потом рисуешь третий.

Что тебе надо? Скриншоты экрана, или скриншоты всех твоих окон по отдельности в отдельный участой времени?


Название: Re: Запись всего, что видно на экране, в картинку
Отправлено: PulSar.CE3194694 от Февраль 07, 2013, 14:28
Надо так:
Рисую первый.
Рисую второй поверх того, что нарисовалось в первом.
Рисую третий поверх того, что нарисовалось во втором и первом.
Рисую четвертый поверх того, что нарисовалось в предыдущих случаях.
...
Сохранить.

Как в фотошопе. Там на слоях все нарисовано. А потом сохраняем в файл и видим всю картинку целиком, а не отдельный слой.


Название: Re: Запись всего, что видно на экране, в картинку
Отправлено: gil9red от Февраль 07, 2013, 14:39
http://doc.qt.digia.com/stable/desktop-screenshot.html

Использовать QPixmap::grabWindow() для захвата картинки определенного окна или виджета на окне

Использовать QPixmap::save() дабы сохранить то что на pixmap

Не это ли вам надо? :)


Название: Re: Запись всего, что видно на экране, в картинку
Отправлено: Bepec от Февраль 07, 2013, 14:40
Насколько я понимаю, каждый твой новый вызов вызывает изменение размеров полотна под виджет-отрисовку виджета. Тебе же надо складывать изображения.

Тут уже графика пошла, но как то так: создать независимый QImage/QPixmap/QBitmap, получить картинку с первого виджета, скопировать её в QImage//--//--//. Получить картинку со второго и тоже скопировать.


Название: Re: Запись всего, что видно на экране, в картинку
Отправлено: PulSar.CE3194694 от Февраль 07, 2013, 15:43
http://doc.qt.digia.com/stable/desktop-screenshot.html

Использовать QPixmap::grabWindow() для захвата картинки определенного окна или виджета на окне

Использовать QPixmap::save() дабы сохранить то что на pixmap

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

Насколько я понимаю, каждый твой новый вызов вызывает изменение размеров полотна под виджет-отрисовку виджета. Тебе же надо складывать изображения.

Тут уже графика пошла, но как то так: создать независимый QImage/QPixmap/QBitmap, получить картинку с первого виджета, скопировать её в QImage//--//--//. Получить картинку со второго и тоже скопировать.

А слияние двух изображений как выполнить (одно наложить поверх другого с заданием координаты вершины)?