]> Creatis software - clitk.git/blobdiff - vv/vvAnimatedGIFWriter.cxx
Add gdcm dependencies
[clitk.git] / vv / vvAnimatedGIFWriter.cxx
index 75352acacc0f05b33f48540b97b9ad52649fddaa..8ba0f69062a3b0b2591c79ce409e3ddbcd1bbcf8 100644 (file)
@@ -18,6 +18,7 @@ vvAnimatedGIFWriter::vvAnimatedGIFWriter()
 {
   Rate = 5;
   Loops = 0;
+  Dither = false;
 }
 
 //---------------------------------------------------------------------------
@@ -65,21 +66,39 @@ void vvAnimatedGIFWriter::End()
   cast->SetOutputScalarTypeToUnsignedChar();
   cast->Update();
 
+  // Create palette for CxImage => Swap r and b in LUT
+  RGBQUAD pal[256];
+  memcpy(pal, (RGBQUAD*)(quant->GetLookupTable()->GetPointer(0)), sizeof(RGBQUAD)*256);
+  for(unsigned int j=0; j<256; j++)
+    std::swap(pal[j].rgbBlue, pal[j].rgbRed);
+
   // Create a stack of CxImages
   DWORD width = cast->GetOutput()->GetExtent()[1]-cast->GetOutput()->GetExtent()[0]+1;
   DWORD height = cast->GetOutput()->GetExtent()[3]-cast->GetOutput()->GetExtent()[2]+1;
   std::vector<CxImage*> cximages( RGBslices.size() );
   for(unsigned int i=0; i<RGBslices.size(); i++) {
     cximages[i] = new CxImage;
-    cximages[i]->CreateFromArray((BYTE *)cast->GetOutput()->GetScalarPointer(0,0,i),
-                                 width, height, 8, width, false);
     cximages[i]->SetFrameDelay(100/Rate);
-    cximages[i]->SetPalette((RGBQUAD*)(quant->GetLookupTable()->GetPointer(0)));
+    if(Dither) {
+      cximages[i]->CreateFromArray((BYTE *)RGBvolume->GetOutput()->GetScalarPointer(0,0,i),
+                                   width, height, 24, width*3, false);
+      cximages[i]->SwapRGB2BGR();
+      cximages[i]->DecreaseBpp(8, true, pal);
+    }
+    else {
+      cximages[i]->CreateFromArray((BYTE *)cast->GetOutput()->GetScalarPointer(0,0,i),
+                                   width, height, 8, width, false);
+      cximages[i]->SetPalette(pal);
+    }
   }
 
   // Create gif
   FILE * pFile;
   pFile = fopen (this->FileName, "wb");
+  if(pFile==NULL) {
+    vtkErrorMacro("Error in vvAnimatedGIFWriter::End: could not open " << this->FileName );
+    return;
+  }
   CxImageGIF cximagegif;
   cximagegif.SetLoops(Loops);
   bool result = cximagegif.Encode(pFile,&(cximages[0]), (int)RGBslices.size(), true);