Selaa lähdekoodia

Create thumbnail on ctkDICOMDatabase::insert()

Marco Nolden 14 vuotta sitten
vanhempi
commit
533ab32189
2 muutettua tiedostoa jossa 22 lisäystä ja 2 poistoa
  1. 21 1
      Libs/DICOM/Core/ctkDICOMDatabase.cpp
  2. 1 1
      Libs/DICOM/Core/ctkDICOMDatabase.h

+ 21 - 1
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -36,6 +36,7 @@
 
 // ctkDICOM includes
 #include "ctkDICOMDatabase.h"
+#include "ctkDICOMImage.h"
 
 #include "ctkLogger.h"
 
@@ -51,6 +52,7 @@
 #include <dcmtk/ofstd/ofstring.h>
 #include <dcmtk/ofstd/ofstd.h>        /* for class OFStandard */
 #include <dcmtk/dcmdata/dcddirif.h>   /* for class DicomDirInterface */
+#include <dcmimage.h>
 
 //------------------------------------------------------------------------------
 static ctkLogger logger("org.commontk.dicom.DICOMDatabase" );
@@ -228,7 +230,7 @@ void ctkDICOMDatabase::insert ( DcmDataset *dataset ) {
 */
 
 //------------------------------------------------------------------------------
-void ctkDICOMDatabase::insert ( DcmDataset *dataset, bool storeFile ) {
+void ctkDICOMDatabase::insert ( DcmDataset *dataset, bool storeFile, bool createThumbnail ) {
   Q_D(ctkDICOMDatabase);
 
   // Check to see if the file has already been loaded
@@ -416,6 +418,24 @@ void ctkDICOMDatabase::insert ( DcmDataset *dataset, bool storeFile ) {
       statement.exec();
       }
     }
+
+  if (createThumbnail)
+  {
+    QString thumbnailBaseDir = databaseDirectory() + "/thumbs/";
+    QString thumbnailFilename = thumbnailBaseDir + "/" + pathForDataset(dataset) + ".png";
+    QFileInfo thumbnailInfo(thumbnailFilename);
+    if ( ! ( thumbnailInfo.exists() && thumbnailInfo.lastModified() < QFileInfo(filename).lastModified() ) )
+    {
+      QString studySeriesDirectory = QString(studyInstanceUID.c_str()) + "/" + seriesInstanceUID.c_str();
+      QDir(thumbnailBaseDir).mkpath(studySeriesDirectory);
+      // TODO: reuse dataset
+      DicomImage dcmtkImage(filename.toAscii());
+      ctkDICOMImage ctkImage(&dcmtkImage);
+      QImage image( ctkImage.getImage(0) );
+      image.scaled(128,128,Qt::KeepAspectRatio).save(thumbnailFilename,"PNG");
+    }
+  }
+
   if (d->DatabaseFileName == ":memory:")
     {
       emit databaseChanged();

+ 1 - 1
Libs/DICOM/Core/ctkDICOMDatabase.h

@@ -64,7 +64,7 @@ public:
   /**
    * Insert into the database if not already exsting.
    */
-  void insert ( DcmDataset *dataset, bool storeFile = true );
+  void insert ( DcmDataset *dataset, bool storeFile = true, bool createThumbnail = true );
   /***
     * Helper method: get the path that should be used to store this  image.
     */