Explorar el Código

Use thumbnail generator in ctkDICOMIndexer

nherlambang hace 14 años
padre
commit
b0f2fc773b

+ 10 - 6
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -576,15 +576,19 @@ void ctkDICOMDatabase::insert ( DcmDataset *dataset, bool storeFile, bool genera
 
 
   if(generateThumbnail){
   if(generateThumbnail){
       if(d->thumbnailGenerator){
       if(d->thumbnailGenerator){
-        DicomImage dcmImage(filename.toAscii());
         QString studySeriesDirectory = QString(studyInstanceUID.c_str()) + "/" + QString(seriesInstanceUID.c_str());
         QString studySeriesDirectory = QString(studyInstanceUID.c_str()) + "/" + QString(seriesInstanceUID.c_str());
         //Create thumbnail here
         //Create thumbnail here
-        QDir(databaseDirectory() + "/thumbs/").mkpath(studySeriesDirectory);
         QString thumbnailPath = databaseDirectory() +
         QString thumbnailPath = databaseDirectory() +
-                                "/thumbs/" + QString(studyInstanceUID.c_str()) + "/" +
-                                QString(seriesInstanceUID.c_str()) + "/" +
-                                QString(sopInstanceUID.c_str()) + ".png";
-        d->thumbnailGenerator->generateThumbnail(&dcmImage, thumbnailPath);
+                            "/thumbs/" + this->pathForDataset(dataset) + ".png";
+                            //QString(studyInstanceUID.c_str()) + "/" +
+                            //QString(seriesInstanceUID.c_str()) + "/" +
+                            //QString(sopInstanceUID.c_str()) + ".png";
+        QFileInfo thumbnailInfo(thumbnailPath);
+        if(!(thumbnailInfo.exists() && (thumbnailInfo.lastModified() > QFileInfo(filename).lastModified()))){
+            QDir(databaseDirectory() + "/thumbs/").mkpath(studySeriesDirectory);
+            DicomImage dcmImage(filename.toAscii());
+            d->thumbnailGenerator->generateThumbnail(&dcmImage, thumbnailPath);
+        }
       }
       }
   }
   }
 
 

+ 31 - 13
Libs/DICOM/Core/ctkDICOMIndexer.cpp

@@ -34,8 +34,7 @@
 
 
 // ctkDICOM includes
 // ctkDICOM includes
 #include "ctkDICOMIndexer.h"
 #include "ctkDICOMIndexer.h"
-#include "ctkDICOMImage.h"
-
+#include "ctkDICOMAbstractThumbnailGenerator.h"
 
 
 // DCMTK includes
 // DCMTK includes
 #ifndef WIN32
 #ifndef WIN32
@@ -61,6 +60,7 @@ public:
   ctkDICOMIndexerPrivate();
   ctkDICOMIndexerPrivate();
   ~ctkDICOMIndexerPrivate();
   ~ctkDICOMIndexerPrivate();
 
 
+  ctkDICOMAbstractThumbnailGenerator* thumbnailGenerator;
 };
 };
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -69,6 +69,7 @@ public:
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 ctkDICOMIndexerPrivate::ctkDICOMIndexerPrivate()
 ctkDICOMIndexerPrivate::ctkDICOMIndexerPrivate()
 {
 {
+    this->thumbnailGenerator = NULL;
 }
 }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -77,6 +78,8 @@ ctkDICOMIndexerPrivate::~ctkDICOMIndexerPrivate()
 }
 }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
 // ctkDICOMIndexer methods
 // ctkDICOMIndexer methods
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -92,6 +95,8 @@ ctkDICOMIndexer::~ctkDICOMIndexer()
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 void ctkDICOMIndexer::addDirectory(ctkDICOMDatabase& database, const QString& directoryName,const QString& destinationDirectoryName, bool createHierarchy, bool createThumbnails)
 void ctkDICOMIndexer::addDirectory(ctkDICOMDatabase& database, const QString& directoryName,const QString& destinationDirectoryName, bool createHierarchy, bool createThumbnails)
 {
 {
+  Q_D(ctkDICOMIndexer);
+
   QSqlDatabase db = database.database();
   QSqlDatabase db = database.database();
   const std::string src_directory(directoryName.toStdString());
   const std::string src_directory(directoryName.toStdString());
 
 
@@ -394,17 +399,17 @@ void ctkDICOMIndexer::addDirectory(ctkDICOMDatabase& database, const QString& di
 
 
     if (createThumbnails)
     if (createThumbnails)
     {
     {
-      QString thumbnailBaseDir =  database.databaseDirectory() + "/thumbs/";
-      QString thumbnailFilename = thumbnailBaseDir + "/" + database.pathForDataset(dataset) + ".png";
-      QFileInfo thumbnailInfo(thumbnailFilename);
-      if ( ! ( thumbnailInfo.exists() && thumbnailInfo.lastModified() < QFileInfo(qfilename).lastModified() ) )
-      {
-        QDir(thumbnailBaseDir).mkpath(studySeriesDirectory);
-        DicomImage dcmtkImage(qfilename.toAscii());
-        ctkDICOMImage ctkImage(&dcmtkImage);
-        QImage image( ctkImage.frame(0) );
-        image.scaled(128,128,Qt::KeepAspectRatio).save(thumbnailFilename,"PNG");
-      }
+        if(d->thumbnailGenerator){
+          QString thumbnailBaseDir =  database.databaseDirectory() + "/thumbs/";
+          QString thumbnailFilename = thumbnailBaseDir + "/" + database.pathForDataset(dataset) + ".png";
+          QFileInfo thumbnailInfo(thumbnailFilename);
+          if ( ! ( thumbnailInfo.exists() && thumbnailInfo.lastModified() < QFileInfo(qfilename).lastModified() ) )
+          {
+            QDir(thumbnailBaseDir).mkpath(studySeriesDirectory);
+            DicomImage dcmtkImage(qfilename.toAscii());
+            d->thumbnailGenerator->generateThumbnail(&dcmtkImage, thumbnailFilename);
+          }
+        }
     }
     }
     // */
     // */
     //------------------------
     //------------------------
@@ -463,3 +468,16 @@ void ctkDICOMIndexer::refreshDatabase(ctkDICOMDatabase& database, const QString&
     filesytemFiles.insert(dirIt.next());
     filesytemFiles.insert(dirIt.next());
     }
     }
 }
 }
+
+//------------------------------------------------------------------------------
+void ctkDICOMIndexer::setThumbnailGenerator(ctkDICOMAbstractThumbnailGenerator *generator){
+    Q_D(ctkDICOMIndexer);
+    d->thumbnailGenerator = generator;
+}
+
+//------------------------------------------------------------------------------
+ctkDICOMAbstractThumbnailGenerator* ctkDICOMIndexer::thumbnailGenerator(){
+    Q_D(ctkDICOMIndexer);
+    return d->thumbnailGenerator;
+}
+

+ 9 - 0
Libs/DICOM/Core/ctkDICOMIndexer.h

@@ -28,6 +28,8 @@
 #include "ctkDICOMDatabase.h"
 #include "ctkDICOMDatabase.h"
 
 
 class ctkDICOMIndexerPrivate;
 class ctkDICOMIndexerPrivate;
+class ctkDICOMAbstractThumbnailGenerator;
+
 /**
 /**
     \brief Indexes DICOM images located in local directory into an Sql database
     \brief Indexes DICOM images located in local directory into an Sql database
 */
 */
@@ -48,6 +50,13 @@ public:
                     const QString& destinationDirectoryName = "",
                     const QString& destinationDirectoryName = "",
                     bool createHierarchy = true, bool createThumbnails = true);
                     bool createHierarchy = true, bool createThumbnails = true);
   void refreshDatabase(ctkDICOMDatabase& database, const QString& directoryName);
   void refreshDatabase(ctkDICOMDatabase& database, const QString& directoryName);
+
+  ///
+  /// set thumbnail generator object
+  void setThumbnailGenerator(ctkDICOMAbstractThumbnailGenerator* generator);
+  ///
+  /// get thumbnail genrator object
+  ctkDICOMAbstractThumbnailGenerator* thumbnailGenerator();
 protected:
 protected:
   QScopedPointer<ctkDICOMIndexerPrivate> d_ptr;
   QScopedPointer<ctkDICOMIndexerPrivate> d_ptr;
   
   

+ 1 - 0
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -57,6 +57,7 @@ ctkDICOMAppWidgetPrivate::ctkDICOMAppWidgetPrivate(){
   thumbnailGenerator = QSharedPointer <ctkDICOMThumbnailGenerator> (new ctkDICOMThumbnailGenerator);
   thumbnailGenerator = QSharedPointer <ctkDICOMThumbnailGenerator> (new ctkDICOMThumbnailGenerator);
   DICOMDatabase->setThumbnailGenerator(thumbnailGenerator.data());
   DICOMDatabase->setThumbnailGenerator(thumbnailGenerator.data());
   DICOMIndexer = QSharedPointer<ctkDICOMIndexer> (new ctkDICOMIndexer);
   DICOMIndexer = QSharedPointer<ctkDICOMIndexer> (new ctkDICOMIndexer);
+  DICOMIndexer->setThumbnailGenerator(thumbnailGenerator.data());
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------