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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.2.2 Как сохранить QGraphicsScene в файл (bmp, png, ..)?  (Прочитано 21762 раз)
zaz80
Гость
« : Март 21, 2007, 20:48 »

Кто-нибудь пробовал сохранять построенную сцену (QGraphicsScene) со  всеми элементами как изображение, т.е. в файл bmp, png, jpg, ...

Можно сохранить QGraphicsView, как QWidget:

   QGraphicsView *myGrView;
   QPixmap pixmap = QPixmap::grabWidget(myGrView);
   pixmap.save("d:\\test.bmp");

Но в этом случае, сохраняется (естественно) только видимая часть сцены, т.е. если сцена не помещается на экране, то и "картинка" будет неполной.

HELP!!!
Записан
troorl
Гость
« Ответ #1 : Март 21, 2007, 21:37 »

Я вот так сохраняю.
Код:
QImage image(scene->width(), scene->height(), QImage::Format_ARGB32_Premultiplied);
QPainter painter(&image);
scene->render(&painter);
image.save("/somepath/result.png");


Только у меня возникла проблема с прозрачностью. Если поставить заливку фона сцены прозрачным цветом, то сохраняется эта картинка с какими-то артефактами. Например, полизображения может быть изуродовано полосками, а другая половина с нормальной прозрачностью.
Если кто знает причину - отзовитесь.
Записан
zaz80
Гость
« Ответ #2 : Март 21, 2007, 21:59 »

спасибо!
Записан
_govorilka
Гость
« Ответ #3 : Март 26, 2007, 06:49 »

Цитата: "troorl"
Я вот так сохраняю.
Код:
QImage image(scene->width(), scene->height(), QImage::Format_ARGB32_Premultiplied);
QPainter painter(&image);
scene->render(&painter);
image.save("/somepath/result.png");


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


QImage - это массив, и как любой другой массив его надо инициализировать (заполнять нулями).
Записан
troorl
Гость
« Ответ #4 : Март 26, 2007, 20:39 »

Цитата: "_govorilka"

QImage - это массив, и как любой другой массив его надо инициализировать (заполнять нулями).

Да, я уже догадался.
Код:
image.fill(NULL);

выручает Улыбающийся
Записан
mal
Гость
« Ответ #5 : Апрель 07, 2008, 19:19 »

А если я повернул сцену с ее примитивами на какой либо угол. и хочу сохранить ее в таком виде - как быть?
Скажем добавление в приведенном коде после scene->render(...)
painter.rotate(...) не помогает.
Есть идеи?
Записан
StatuS74
Гость
« Ответ #6 : Август 11, 2011, 10:15 »

так как сделать что бы картина полной сохранялось а не урезаной ?

Записан
StatuS74
Гость
« Ответ #7 : Октябрь 26, 2011, 08:14 »

я сохраняю вот так.
Код:
 QString puti_save;
    QImage image(scene->width(), scene->height(), QImage::Format_ARGB32_Premultiplied);
    image.fill(QColor(Qt::white).rgb());
    QPainter painter(&image);
    scene->render(&painter);
    painter.end();
    puti_save = ser_mumb;
    puti_save.append("_тест №1_").append(".PNG");
    image.save(puti_save);
не могу понять как мне указать путь куда сохранять и имя что бы было
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #8 : Октябрь 26, 2011, 09:02 »

Код
C++ (Qt)
image.save(QString("/some/path/%1_тест №1_.PNG").arg(ser_mumb));
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
StatuS74
Гость
« Ответ #9 : Октябрь 26, 2011, 10:08 »

попробовал не сохраняет.
сделал вот так
Код:
QString puti_save;
    QImage image(scene->width(), scene->height(), QImage::Format_ARGB32_Premultiplied);
    image.fill(QColor(Qt::white).rgb());
    QPainter painter(&image);
    scene->render(&painter);
    painter.end();
    puti_save = "/Графики_тестов/";
    puti_save = puti_save.append(ser_mumb);
    puti_save.append("_тест №1_").append(".PNG");
    image.save(puti_save);
тоже не сохраняет
Записан
ninjaproger
Гость
« Ответ #10 : Октябрь 26, 2011, 10:18 »

 Попробуй через QPixmap;


QPixmap pixmap;
QPainter pixPainter(&pixmap);
YourEditorScene->render(&pixPainter,sceneRect,sceneRect);
pixmap.save(filename, "PNG"); // writes pixmap into bytes in PNG format
Записан
StatuS74
Гость
« Ответ #11 : Октябрь 26, 2011, 10:24 »

надо через QImage. если сохранять просто без пути то все работает. а если путь писать то не пишит
Записан
ninjaproger
Гость
« Ответ #12 : Октябрь 26, 2011, 10:51 »

У меня с путями в таком варианте работает

QString format = "png";
QString initialPath = QDir::currentPath() + tr("/untitled.") + format;
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
                               initialPath,
                               tr("%1 Files (*.%2);;All Files (*)")
                               .arg(format.toUpper())
                               .arg(format));
if (!fileName.isEmpty())
        getPixmap().save(fileName, format.toAscii());

попробуй пути получать через QDir
Записан
StatuS74
Гость
« Ответ #13 : Октябрь 26, 2011, 11:14 »

все заработало =) сделал через директории
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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