[QGIS Commit] r9246 - trunk/qgis/src/app/composer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Sep 2 12:44:09 EDT 2008


Author: mhugent
Date: 2008-09-02 12:44:09 -0400 (Tue, 02 Sep 2008)
New Revision: 9246

Modified:
   trunk/qgis/src/app/composer/qgscomposer.cpp
Log:
restored save as image function in composer

Modified: trunk/qgis/src/app/composer/qgscomposer.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposer.cpp	2008-09-02 15:06:57 UTC (rev 9245)
+++ trunk/qgis/src/app/composer/qgscomposer.cpp	2008-09-02 16:44:09 UTC (rev 9246)
@@ -857,11 +857,9 @@
 
 void QgsComposer::on_mActionExportAsImage_activated( void )
 {
-
-#if 0
   // Image size
-  int width = ( int )( mComposition->resolution() * mComposition->paperWidth() / 25.4 );
-  int height = ( int )( mComposition->resolution() * mComposition->paperHeight() / 25.4 );
+  int width = ( int )( mComposition->printoutResolution() * mComposition->paperWidth() / 25.4 );
+  int height = ( int )( mComposition-> printoutResolution() * mComposition->paperHeight() / 25.4 );
 
   int memuse = width * height * 3 / 1000000;  // pixmap + image
   QgsDebugMsg( QString( "Image %1 x %2" ).arg( width ).arg( height ) );
@@ -889,8 +887,8 @@
 
   //find out the last used filter
   QSettings myQSettings;  // where we keep last used filter in persistant state
-  QString myLastUsedFormat = myQSettings.readEntry( "/UI/lastSaveAsImageFormat", "png" );
-  QString myLastUsedFile = myQSettings.readEntry( "/UI/lastSaveAsImageFile", "qgis.png" );
+  QString myLastUsedFormat = myQSettings.value( "/UI/lastSaveAsImageFormat", "png" ).toString();
+  QString myLastUsedFile = myQSettings.value( "/UI/lastSaveAsImageFile", "qgis.png").toString();
   QFileInfo file( myLastUsedFile );
 
   // get a list of supported output image types
@@ -900,7 +898,7 @@
   for ( ; myCounterInt < QImageWriter::supportedImageFormats().count(); myCounterInt++ )
   {
     QString myFormat = QString( QImageWriter::supportedImageFormats().at( myCounterInt ) );
-    QString myFilter = myFormat + " " + tr( "format" ) + " (*." + myFormat.lower() + " *." + myFormat.upper() + ")";
+    QString myFilter = myFormat + " " + tr( "format" ) + " (*." + myFormat.toLower() + " *." + myFormat.toUpper() + ")";
 
     if ( myCounterInt > 0 ) myFilters += ";;";
     myFilters += myFilter;
@@ -931,7 +929,7 @@
   myQFileDialog->selectFile( file.fileName() );
 
   // allow for selection of more than one file
-  myQFileDialog->setMode( QFileDialog::AnyFile );
+  myQFileDialog->setFileMode( QFileDialog::AnyFile );
 
   // set the filter to the last one used
   myQFileDialog->selectFilter( myLastUsedFilter );
@@ -940,43 +938,42 @@
   myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
 
   //prompt the user for a file name
-  QString myOutputFileNameQString; // = myQFileDialog->getSaveFileName(); //delete this
+  QString myOutputFileNameQString;
 
   int result = myQFileDialog->exec();
-  raise();
+  //raise();
 
-  if ( result != QDialog::Accepted ) return;
+  if ( result != QDialog::Accepted )
+    {
+      return;
+    }
 
   myOutputFileNameQString = myQFileDialog->selectedFiles().first();
   QString myFilterString = myQFileDialog->selectedFilter();
   QgsDebugMsg( QString( "Selected filter: %1" ).arg( myFilterString ) );
   QgsDebugMsg( QString( "Image type: %1" ).arg( myFilterMap[myFilterString] ) );
 
-  myQSettings.writeEntry( "/UI/lastSaveAsImageFormat", myFilterMap[myFilterString] );
-  myQSettings.writeEntry( "/UI/lastSaveAsImageFile", myOutputFileNameQString );
+  myQSettings.setValue( "/UI/lastSaveAsImageFormat", myFilterMap[myFilterString] );
+  myQSettings.setValue( "/UI/lastSaveAsImageFile", myOutputFileNameQString );
 
   if ( myOutputFileNameQString == "" ) return;
 
-  double scale = ( double )( mComposition->resolution() / 25.4 / mComposition->scale() );
-
-  mView->setScene( 0 );
   mComposition->setPlotStyle( QgsComposition::Print );
+  mView->setScene(0);
 
-  QPixmap pixmap( width, height );
-  pixmap.fill( QColor( 255, 255, 255 ) ) ;
-  QPainter p( &pixmap );
-  p.scale( scale, scale );
-
-  QRectF renderArea( 0, 0, ( mComposition->paperWidth() * mComposition->scale() ), ( mComposition->paperHeight() * mComposition->scale() ) );
-
-  mComposition->canvas()->render( &p, renderArea );
+  QImage image( QSize(width, height), QImage::Format_ARGB32 );
+  image.setDotsPerMeterX(mComposition->printoutResolution() / 25.4 * 1000);
+  image.setDotsPerMeterY(mComposition->printoutResolution() / 25.4 * 1000);
+  image.fill(0);
+  QPainter p( &image );
+  QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight());
+  QRectF targetArea(0, 0, width, height);
+  mComposition->render( &p, targetArea, sourceArea);
   p.end();
 
   mComposition->setPlotStyle( QgsComposition::Preview );
-  mView->setScene( mComposition->canvas() );
-
-  pixmap.save( myOutputFileNameQString, myFilterMap[myFilterString].toLocal8Bit().data() );
-#endif //0
+  image.save( myOutputFileNameQString, myFilterMap[myFilterString].toLocal8Bit().data() );
+  mView->setScene(mComposition);
 }
 
 



More information about the QGIS-commit mailing list