bool QgsCompositionChecker::testComposition( QString &theReport, int page, int pixelDiff ) { if ( !mComposition ) { return false; } setControlName( "expected_" + mTestName ); #if 0 //fake mode to generate expected image //assume 96 dpi and size of the control image 1122 * 794 QImage newImage( QSize( 1122, 794 ), QImage::Format_RGB32 ); mComposition->setPlotStyle( QgsComposition::Print ); newImage.setDotsPerMeterX( 96 / 25.4 * 1000 ); newImage.setDotsPerMeterY( 96 / 25.4 * 1000 ); drawBackground( &newImage ); QPainter expectedPainter( &newImage ); //QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() ); //QRectF targetArea( 0, 0, 3507, 2480 ); mComposition->renderPage( &expectedPainter, page ); expectedPainter.end(); newImage.save( mExpectedImageFile, "PNG" ); return true; #endif //0 QImage outputImage( mSize, QImage::Format_RGB32 ); mComposition->setPlotStyle( QgsComposition::Print ); outputImage.setDotsPerMeterX( mDotsPerMeter ); outputImage.setDotsPerMeterY( mDotsPerMeter ); drawBackground( &outputImage ); QPainter p( &outputImage ); mComposition->renderPage( &p, page ); p.end(); QString renderedFilePath = QDir::tempPath() + QDir::separator() + QFileInfo( mTestName ).baseName() + "_rendered.png"; outputImage.save( renderedFilePath, "PNG" ); setRenderedImage( renderedFilePath ); bool testResult = runTest( mTestName, pixelDiff ); theReport += report(); return testResult; }
bool QgsCompositionChecker::testComposition( QString &report, int page, int pixelDiff ) { if ( !mComposition ) { return false; } setControlName( "expected_" + mTestName ); #if 0 //fake mode to generate expected image //assume 96 dpi and size of the control image 1122 * 794 QImage newImage( QSize( 1122, 794 ), QImage::Format_ARGB32 ); mComposition->setPlotStyle( QgsComposition::Print ); newImage.setDotsPerMeterX( 96 / 25.4 * 1000 ); newImage.setDotsPerMeterY( 96 / 25.4 * 1000 ); newImage.fill( 0 ); QPainter expectedPainter( &newImage ); //QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() ); //QRectF targetArea( 0, 0, 3507, 2480 ); mComposition->renderPage( &expectedPainter, page ); expectedPainter.end(); newImage.save( mExpectedImageFile, "PNG" ); return true; #endif //0 //load expected image QImage expectedImage( mExpectedImageFile ); //get width/height, create image and render the composition to it int width = expectedImage.width(); int height = expectedImage.height(); QImage outputImage( QSize( width, height ), QImage::Format_ARGB32 ); mComposition->setPlotStyle( QgsComposition::Print ); outputImage.setDotsPerMeterX( expectedImage.dotsPerMeterX() ); outputImage.setDotsPerMeterY( expectedImage.dotsPerMeterX() ); outputImage.fill( 0 ); QPainter p( &outputImage ); mComposition->renderPage( &p, page ); p.end(); QString renderedFilePath = QDir::tempPath() + QDir::separator() + QFileInfo( mTestName ).baseName() + "_rendered.png"; outputImage.save( renderedFilePath, "PNG" ); QString diffFilePath = QDir::tempPath() + QDir::separator() + QFileInfo( mTestName ).baseName() + "_result_diff.png"; bool testResult = compareImages( mTestName, pixelDiff, renderedFilePath ); QString myDashMessage = "<DartMeasurementFile name=\"Rendered Image " + mTestName + "\"" " type=\"image/png\">" + renderedFilePath + "</DartMeasurementFile>" "<DartMeasurementFile name=\"Expected Image " + mTestName + "\" type=\"image/png\">" + mExpectedImageFile + "</DartMeasurementFile>" "<DartMeasurementFile name=\"Difference Image " + mTestName + "\" type=\"image/png\">" + diffFilePath + "</DartMeasurementFile>"; qDebug( ) << myDashMessage; report += mReport; return testResult; }