[vtkusers] [vtk-developers] Bug in vtkImageMapToColors
Nicolas Rannou
Nicolas_Rannou at hms.harvard.edu
Mon May 9 13:29:13 EDT 2011
Thanks David,
yes such a feature to get the scalar range over all the components would be nice.
Maybe we should also update the documentation (http://www.vtk.org/doc/nightly/html/classvtkDataSet.html#a9c8f06877f41b3e1944f2d10281083a6).
virtual void vtkDataSet::GetScalarRange ( double range[2] ) [virtual]
Convenience method to get the range of the scalar data (if there is any scalar data). Returns the (min/max) range of combined point and cell data. If there are no point or cell scalars the method will return (0,1). Note: Update needs to be called to create the scalars. THIS METHOD IS THREAD SAFE IF FIRST CALLED FROM A SINGLE THREAD AND THE DATASET IS NOT MODIFIED
To highlight that it computes the scalar range on the first component?
Thanks!
Nicolas
On May 7, 2011, at 5:25 PM, David Gobbi wrote:
> The only way that I know of is to get the range directly from the scalars,
>
> double range[2];
> data->GetPointData()->GetScalars()->GetRange(range, component);
>
> Personally, I would not be opposed to changing vtkDataSet::ComputeRange()
> so that it computed the range over all components.
>
> David
>
>
> On Sat, May 7, 2011 at 1:37 PM, Nicolas Rannou
> <Nicolas_Rannou at hms.harvard.edu> wrote:
>> Hi David,
>>
>> Thanks for the clarification.
>> Which is the best practice to get the scalar range of each component then?
>>
>>
>> On May 6, 2011, at 5:53 PM, David Gobbi wrote:
>>
>>> Hi Nicolas,
>>>
>>> The GetScalarRange() method computes the scalar range of the first component.
>>>
>>> - David
>>>
>>>
>>> On Fri, May 6, 2011 at 3:00 PM, Nicolas Rannou
>>> <nicolas_rannou at hms.harvard.edu> wrote:
>>>> Hello,
>>>>
>>>> I'm experiencing a strange behavior in VTK which might be a bug.
>>>> It took me a while to locate the issue:
>>>>
>>>> if I create a LUT with a NULL red component:
>>>> iRed = 0;
>>>> iGreen = 255;
>>>> iBlue = 255;
>>>> iAlpha = 255;
>>>> double iRange[2] = {0, 255};
>>>>
>>>> vtkSmartPointer<vtkLookupTable> lut =
>>>> vtkSmartPointer<vtkLookupTable>::New();
>>>> double* HSV = vtkMath::RGBToHSV(iRed,iGreen,iBlue);
>>>> lut->SetAlpha(iAlpha);
>>>> lut->SetHueRange(HSV[0], HSV[0]);
>>>> lut->SetSaturationRange(1, 1);
>>>> lut->SetValueRange(0, 1);
>>>> lut->SetRange(iRange);
>>>> lut->Build();
>>>>
>>>> I color my image with this LUT:
>>>>
>>>> vtkSmartPointer<vtkImageMapToColors> coloredImage =
>>>> vtkSmartPointer<vtkImageMapToColors>::New();
>>>> coloredImage->SetLookupTable(iLUT);
>>>> coloredImage->SetInput( iImage );
>>>> coloredImage->PassAlphaToOutputOff();
>>>> coloredImage->SetOutputFormatToRGB();
>>>> coloredImage->Update();
>>>>
>>>> then:
>>>> double* range = coloredImage->GetOutput()->GetScalarRange();
>>>> returns [0,0].
>>>> then everything I do with this image is messed up...
>>>>
>>>> If iRed != 0, the scalar range of the "coloredImage" will be correct then my
>>>> pipeline is working.
>>>>
>>>> Am I doing something wrong?
>>>>
>>>> Thanks,
>>>>
>>>> Nicolas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110509/7834859c/attachment.htm>
More information about the vtkusers
mailing list