hyperion.ng/test/TestQtScreenshot.cpp
LordGrey 25d79a9f3f
Qt6 support (#1363)
* Initial Qt6 config

* Change Package order to reingfence missing packages

* Update to QT 6.2.0

* Qt 6.2.0 updates

* macOS fix

* Simplify handling QT5 & Qt6 in parallel

* Updates for Windows

* Fix macos build

* macOS linker fix

* General support of QTDIR, update docu

* MaxOS add default qt directories

* Fix merge typo

* Update default CMakeSettings.json with installation path options

* Add additional libs required by Qt6 to CompileHowTo

* Fix Qt5 items

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2021-11-16 18:12:56 +01:00

74 lines
2.1 KiB
C++

// STL includes
#include <iostream>
// QT includes
#include <QApplication>
#include <QPixmap>
#include <QFile>
#include <QRgb>
#include <QScreen>
#include <QElapsedTimer>
// Utils includes
#include <utils/Image.h>
#include <utils/ColorRgb.h>
void createScreenshot(const int cropHorizontal, const int cropVertical, const int decimation, Image<ColorRgb> & image)
{
// Create the full size screenshot
QScreen *screen = QApplication::primaryScreen();
const QRect screenSize = screen->availableGeometry();
const int croppedWidth = screenSize.width() - 2*cropVertical;
const int croppedHeight = screenSize.height() - 2*cropHorizontal;
const QPixmap fullSizeScreenshot = screen->grabWindow(0, cropVertical, cropHorizontal, croppedWidth, croppedHeight);
// Scale the screenshot to the required size
const int width = fullSizeScreenshot.width()/decimation;
const int height = fullSizeScreenshot.height()/decimation;
const QPixmap scaledScreenshot = fullSizeScreenshot.scaled(width, height, Qt::IgnoreAspectRatio, Qt::FastTransformation);
// Convert the QPixmap to QImage in order to get out RGB values
const QImage qImage = scaledScreenshot.toImage();
// Make sure that the output image has the right size
image.resize(width, height);
// Copy the data into the output image
for (int y=0; y<qImage.height(); ++y)
{
for (int x=0; x<qImage.width(); ++x)
{
// Get the pixel at [x;y] (format int32 #AARRGGBB)
const QRgb inPixel = qImage.pixel(x,y);
// Copy the color channels into the output pixel
ColorRgb & outPixel = image(x,y);
outPixel.red = (inPixel & 0x00ff0000) >> 16;
outPixel.green = (inPixel & 0x0000ff00) >> 8;
outPixel.blue = (inPixel & 0x000000ff);
}
}
}
int main(int argc, char** argv)
{
int decimation = 10;
QApplication app(argc, argv);
QElapsedTimer timer;
Image<ColorRgb> screenshot(64,64);
int loopCnt = 100;
timer.start();
for (int i=0; i<loopCnt; ++i)
{
createScreenshot(0,0, decimation, screenshot);
}
std::cout << "Time required for single screenshot: " << timer.elapsed()/loopCnt << "ms" << std::endl;
return 0;
}