Как сохранить масштабированное изображение внутри QGRaphicsView, используя QFileDialog - PullRequest
0 голосов
/ 15 января 2019

У меня есть пользовательский интерфейс с:

Кнопка N.1 (используется для загрузки изображений)

N.2 QGraphicsView (слева и справа)

N.1 Нажмите кнопку, которая принимает экран печати текущего изображения, загруженного в QGraphicsView слева

С помощью мыши можно:

1) увеличение / уменьшение масштаба изображения

2) нарисуйте прямоугольники на изображении.

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

Согласно этот пост QFileDialog использовался аналогичным образом, который я пытаюсь сделать. Я успешно использовал QFileDialog::getSaveFileName() для сохранения изображения. Однако это не полностью решает проблему.

Ниже кнопки, которая заботится о снятии экрана печати изображения в QGraphicsView слева:

void MainWindow::on_addNewRecordBtn_clicked()
{
    leftScene->clearSelection();     // Selections would also render to the file
    leftScene->setSceneRect(leftScene->itemsBoundingRect());    // Re-shrink the scene to it's bounding contents
    QImage image(leftScene->sceneRect().size().toSize(), QImage::Format_ARGB32);  // Create the image with the exact size of the shrunk scene
    image.fill(Qt::transparent);     // Start all pixels transparent
    QPainter painter(&image);
    leftScene->render(&painter);
    image.save(QFileDialog::getSaveFileName(this, tr("New Image Name"), QDir::rootPath(),
                                        "Name (*.jpg *.jpeg *.png *.tiff *.tif)"));
}

Ожидаемым результатом будет сохранение увеличенного изображения (например, zoom.jpg) следующим образом:

zoomed Particular

Однако, когда я сохраняю изображение (zoom.jpg), в результате я получаю постоянно все изображение с нарисованными элементами:

entire image

1 Ответ

0 голосов
/ 17 марта 2019

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

QImage image = ui->leftView->grab().toImage();

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

void MainWindow::on_addNewRecordBtn_clicked()
{
    leftScene->setSceneRect(leftScene->itemsBoundingRect());
    // Setting off the scroll bars
    ui->leftView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->leftView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    QImage image = ui->leftView->grab().toImage();
    image.save(QFileDialog::getSaveFileName(this, tr("New Image Name"), QDir::rootPath(),
                                            "Name (*.jpg *.jpeg *.png *.tiff *.tif)"));
    // Putting the scroll bars back on
    ui->leftView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    ui->leftView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...