[vtk-developers] vtkImageActor doesn't allow you to increase image components from 1 to 3

David Gobbi david.gobbi at gmail.com
Mon Nov 29 23:51:22 EST 2010


The fix turned out to be easy, it's tested and staged, I'll merge it
tomorrow morning.
Good catch.

  David


On Mon, Nov 29, 2010 at 2:29 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> I can offer some thoughts, but I don't have time to run any tests right
> now.
>
> The vtkImageActor keeps reusing the same texture memory until the texture
> size changes.  But I don't think that it checks to see if the number of
> components changes.  So in the case where you see a failure, OpenGL
> is converting an RGB image to greyscale so that it can fit in the greyscale
> texture that was originally allocated.
>
> The problem is in vtkOpenGLImageActor::MakeDataSuitable() at around
> line 193.
>
>   David
>
>
> On Mon, Nov 29, 2010 at 2:08 PM, David Doria <daviddoria at gmail.com> wrote:
>
>> Any thoughts on this?
>>
>> David
>>
>>
>> On Tue, Nov 23, 2010 at 12:41 PM, David Doria <daviddoria at gmail.com>
>> wrote:
>> > I setup a demo and tried a few cases. (1) - (3) work properly, and (4)
>> > is the issue.
>> >
>> > 1) If I create an image with image->SetNumberOfScalarComponents(1), then
>> call:
>> >
>> > vtkImageActor* actor = vtkImageActor::New()
>> > actor->SetInput(image);
>> >
>> > it works as expected, a grayscale image is displayed.
>> >
>> > 2) If I create an image with image->SetNumberOfScalarComponents(3), then
>> call:
>> >
>> > vtkImageActor* actor = vtkImageActor::New()
>> > actor->SetInput(image);
>> >
>> > it works as expected, a color image is displayed.
>> >
>> > 3) If I create an image with image->SetNumberOfScalarComponents(3), then
>> call:
>> >
>> > vtkImageActor* actor = vtkImageActor::New()
>> > actor->SetInput(image);
>> >
>> > then change the image:
>> > image->SetNumberOfScalarComponents(1)
>> > ... update image ...
>> >
>> > it works as expected, a grayscale image is displayed.
>> >
>> > 4) HOWEVER, if I create an image with
>> > image->SetNumberOfScalarComponents(1), then call:
>> >
>> > vtkImageActor* actor = vtkImageActor::New()
>> > actor->SetInput(image);
>> >
>> > then change the image:
>> > image->SetNumberOfScalarComponents(3)
>> > ... update image ...
>> >
>> > A GRAYSCALE image is still displayed. I have attached a demonstration
>> > of the problem (comment or uncomment #define DemonstrateBug to see the
>> > correct vs the incorrect behavior).
>> >
>> > If someone can confirm this is a bug I will add it to the bug tracker.
>> >
>> > Thanks,
>> >
>> > David
>> >
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20101129/bcbee673/attachment.html>


More information about the vtk-developers mailing list