From 788623fcd57809416ceda4339d79227d07bb51c9 Mon Sep 17 00:00:00 2001 From: malaterre Date: Thu, 4 Oct 2007 08:13:57 +0000 Subject: [PATCH] BUG: Fix serious bug. Grayscale image were produced from garbage input. Thanks to JPR for report and Thanks to Francois B. for voodoo magic to find out the cause --- vtk/vtkImageMapToWindowLevelColors2.cxx | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/vtk/vtkImageMapToWindowLevelColors2.cxx b/vtk/vtkImageMapToWindowLevelColors2.cxx index 4d441737..0d318c3b 100644 --- a/vtk/vtkImageMapToWindowLevelColors2.cxx +++ b/vtk/vtkImageMapToWindowLevelColors2.cxx @@ -22,7 +22,7 @@ #include "vtkScalarsToColors.h" #include "vtkPointData.h" -vtkCxxRevisionMacro(vtkImageMapToWindowLevelColors2, "$Revision: 1.2 $") +vtkCxxRevisionMacro(vtkImageMapToWindowLevelColors2, "$Revision: 1.3 $") vtkStandardNewMacro(vtkImageMapToWindowLevelColors2) // Constructor sets default values @@ -376,13 +376,13 @@ void vtkImageMapToWindowLevelColors2Execute( switch (outputFormat) { case VTK_RGBA: - vtkClampHelper1(iptr+1,optr+1,lower,upper,lower_val,upper_val,shift,scale); - vtkClampHelper1(iptr+2,optr+2,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper1(iptr+(1%numberOfComponents),optr+1,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper1(iptr+(2%numberOfComponents),optr+2,lower,upper,lower_val,upper_val,shift,scale); *(optr+3) = 255; break; case VTK_RGB: - vtkClampHelper1(iptr+1,optr+1,lower,upper,lower_val,upper_val,shift,scale); - vtkClampHelper1(iptr+2,optr+2,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper1(iptr+(1%numberOfComponents),optr+1,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper1(iptr+(2%numberOfComponents),optr+2,lower,upper,lower_val,upper_val,shift,scale); break; case VTK_LUMINANCE_ALPHA: *(optr+1) = 255; @@ -396,17 +396,21 @@ void vtkImageMapToWindowLevelColors2Execute( { for (idxX = 0; idxX < extX; idxX++) { + // We want to shift to the right position depending on the numberOfComponents from input + // if grayscale we should stay at the same position, otherwise need to shift to r,g,b + // (0%numberOfComponents) == 0 ... + // (1%numberOfComponents) == 0 or 1 vtkClampHelper2(iptr,optr,lower,upper,lower_val,upper_val,shift,scale); switch (outputFormat) { case VTK_RGBA: - vtkClampHelper2(iptr+1,optr+1,lower,upper,lower_val,upper_val,shift,scale); - vtkClampHelper2(iptr+2,optr+2,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper2(iptr+(1%numberOfComponents),optr+1,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper2(iptr+(2%numberOfComponents),optr+2,lower,upper,lower_val,upper_val,shift,scale); *(optr+3) = 255; break; case VTK_RGB: - vtkClampHelper2(iptr+1,optr+1,lower,upper,lower_val,upper_val,shift,scale); - vtkClampHelper2(iptr+2,optr+2,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper2(iptr+(1%numberOfComponents),optr+1,lower,upper,lower_val,upper_val,shift,scale); + vtkClampHelper2(iptr+(2%numberOfComponents),optr+2,lower,upper,lower_val,upper_val,shift,scale); break; case VTK_LUMINANCE_ALPHA: *(optr+1) = 255; -- 2.45.0