Unsolved How to get a screenshot in Android?
-
I will be satisfied with any screenshot, application or desktop. My application on QML.
-
I use QQmlApplicationEngine
-
@mikeeeeee I would to it like this:
QQuickWindow* currentWindow = qobject_cast<QQuickWindow*>(QGuiApplication::focusWindow()); if(!currentWindow) return; QScreen* screen = currentWindow->screen(); if(!screen) return; QRect screenGeometry = fullScreen ? screen->geometry() : currentWindow->geometry(); auto pm = screen->grabWindow(0, screenGeometry.x(), screenGeometry.y(), screenGeometry.width(), screenGeometry.height()); QByteArray bArray; QBuffer buffer(&bArray); buffer.open(QIODevice::WriteOnly); pm.save(&buffer, "PNG");
-
I get error:use of undeclared identifier 'fullScreen'
-
This post is deleted! -
This piece of code doesn't work either. I put in my code that converts QScreen to QByteArray. QByteArray is empty.
QQuickWindow* currentWindow = qobject_cast<QQuickWindow*>(QGuiApplication::focusWindow()); // if(!currentWindow) // return; QScreen* screen = currentWindow->screen();
-
This all code
QQuickWindow* currentWindow = qobject_cast<QQuickWindow*>(QGuiApplication::focusWindow());
// if(!currentWindow)
// return;
QScreen* screen = currentWindow->screen();
// if(!screen)
// return;
//QRect screenGeometry = fullScreen ? screen->geometry() : currentWindow->geometry();
/* QRect screenGeometry = fullScreen ? screen->geometry() : currentWindow->geometry();
auto pm = screen->grabWindow(0, screenGeometry.x(), screenGeometry.y(), screenGeometry.width(), screenGeometry.height());QByteArray bArray; QBuffer buffer(&bArray); buffer.open(QIODevice::WriteOnly); pm.save(&buffer, "PNG");*/ QImage myScreen; //QPixmap pic = QPixmap::grabWindow(QWidget::winId(),0,0,50,50); //qDebug()<<QWidget::winId();
// QScreen *screen = QGuiApplication::primaryScreen();
QPixmap pixamp;
pixamp = screen->grabWindow(0);
myScreen = pixamp.toImage();
//myScreen = QPixmap::grabWindow();
//myScreen = quickView->grabWindow();
//myScreen.save("C:\Users\New Owner\Downloads\i.png");
QByteArray bArray;
QBuffer buffer(&bArray);
buffer.open(QIODevice::WriteOnly);
//myScreen.save(&buffer, "JPEG");
//QString image("data:image/jpg;base64,");
myScreen.save(&buffer, "PNG");
QString image("data:image/png;base64,");
image.append(QString::fromLatin1(bArray.toBase64().data()));
qDebug()<<"screenShot:"<<image;
return image; -
Maybe you can use it?
foreach(QObject* obj, engine.rootObjects()) {
QQuickWindow* window = qobject_cast<QQuickWindow*>(obj);
if (window) {
QImage image = window->grabWindow();
qDebug() << image;
}
} -
is the image valid then ?
like
qDebug() << image.isNull();
says false ? -
qDebug()<<"screenShot:"<<image;
return:
"screenShot: "data:image/png;base64,"" -
@mrjj said in How to get a screenshot in Android?:
qDebug() << image.isNull();
qDebug() <<"image.isNull() :" << image.isNull();
return:
image.isNull() : false -
@mikeeeeee
Ok, that means its does grab something :) -
But how to get a picture out of it?
-
@mikeeeeee
Cant you just save it ?
https://doc.qt.io/qt-5/qimage.html#save -
We've made a mistake. I immediately ask the text QString image("data:image/png;base64,"); And so, pictures of the there is no. Need another code.
-
qDebug() <<"image.isNull() :" << image.isNull()<<"screen->size() :"<<screen->size();
return
image.isNull() : false screen->size() : QSize(360, 640) -
@mikeeeeee
Im really not sure what you are saying. :)
That code work for others it seemed
https://stackoverflow.com/questions/21697185/how-to-take-screenshot-of-qml-application-without-qquickview/38501975What Qt version are you using?
-
Could the screen be incorrectly processed?
-
I use Qt 5.13
-
my initial code worked in Windows, but it doesn't work in Android.