How to get a screenshot in Android?
-
@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");
-
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; -
is the image valid then ?
like
qDebug() << image.isNull();
says false ? -
@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 :) -
@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.
@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?
-
@mikeeeeee
Hi
Not all android devices can take shot of QML. Need support in openGL driver.Hmm. your Qt version seems new enough.
if you google "qt qml grabwindow bug" you can see there been quite some issues but
it should work with new Qt versions.How type of android device are you using ? I mena is it old or kinda new ?