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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись всего, что видно на экране, в картинку  (Прочитано 3839 раз)
PulSar.CE3194694
Гость
« : Февраль 07, 2013, 14:05 »

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

Ты каждый раз его перерисовываешь. Т.е. сначала рисуешь первый. Потом рисуешь второй. Потом рисуешь третий.

Что тебе надо? Скриншоты экрана, или скриншоты всех твоих окон по отдельности в отдельный участой времени?
Записан
PulSar.CE3194694
Гость
« Ответ #2 : Февраль 07, 2013, 14:28 »

Надо так:
Рисую первый.
Рисую второй поверх того, что нарисовалось в первом.
Рисую третий поверх того, что нарисовалось во втором и первом.
Рисую четвертый поверх того, что нарисовалось в предыдущих случаях.
...
Сохранить.

Как в фотошопе. Там на слоях все нарисовано. А потом сохраняем в файл и видим всю картинку целиком, а не отдельный слой.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Февраль 07, 2013, 14:39 »

http://doc.qt.digia.com/stable/desktop-screenshot.html

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

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

Не это ли вам надо? Улыбающийся
Записан

Bepec
Гость
« Ответ #4 : Февраль 07, 2013, 14:40 »

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

Тут уже графика пошла, но как то так: создать независимый QImage/QPixmap/QBitmap, получить картинку с первого виджета, скопировать её в QImage//--//--//. Получить картинку со второго и тоже скопировать.
Записан
PulSar.CE3194694
Гость
« Ответ #5 : Февраль 07, 2013, 15:43 »

http://doc.qt.digia.com/stable/desktop-screenshot.html

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

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

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

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

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

А слияние двух изображений как выполнить (одно наложить поверх другого с заданием координаты вершины)?
« Последнее редактирование: Февраль 07, 2013, 15:52 от PulSar.CE3194694 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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