# How can I stack a series of bmp image into 3D view

**URL:** https://discourse.vtk.org/t/how-can-i-stack-a-series-of-bmp-image-into-3d-view/9028
**Category:** Support
**Created:** [July 27, 2022, 11:28am UTC](https://discourse.vtk.org/t/how-can-i-stack-a-series-of-bmp-image-into-3d-view/9028 "2022-07-27T11:28:34Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![BOB0Young](https://discourse.vtk.org/user_avatar/discourse.vtk.org/bob0young/32/5560_2.png) [@BOB0Young](https://discourse.vtk.org/u/BOB0Young)
#### Post date: [July 27, 2022, 11:28am UTC](https://discourse.vtk.org/t/how-can-i-stack-a-series-of-bmp-image-into-3d-view/9028/1 "2022-07-27T11:28:34Z")

</div>

I read a series of bmp image ,and then appending 2D (XY) images along  
the Z axis to form a 3D volume, but there is only the lastest picture.How can I get a 3D view of those series of image?

```auto
void MainWindow::imageappend(){

    vtkSmartPointer<vtkImageAppend > append =
           vtkSmartPointer<vtkImageAppend >::New();
    append->SetAppendAxis(2);

    for(int i = 1; i < 31; i++)
    {
        vtkSmartPointer<vtkBMPReader>reader =
               vtkSmartPointer<vtkBMPReader>::New();
           char fileName[128];
           sprintf(fileName,"/home/yanghantao/Documents/ruxian/%03d_R.bmp", i);
           reader->SetFileName(fileName);
           append->AddInputConnection(reader->GetOutputPort());
    }
    append->Update();
    vtkSmartPointer <vtkImageActor> actor=vtkSmartPointer <vtkImageActor>::New();
              actor->SetInputData(append->GetOutput());
    vtkSmartPointer <vtkRenderer> render=vtkSmartPointer <vtkRenderer>::New();
       //render->SetBackground(0.1,0.1,0.5);
            render->AddActor(actor);
    vtkSmartPointer <vtkRenderWindow> rw=vtkSmartPointer <vtkRenderWindow>::New();
       rw->AddRenderer(render);
    vtkSmartPointer <vtkRenderWindowInteractor> rwi=vtkSmartPointer <vtkRenderWindowInteractor>::New();
       rwi->SetRenderWindow(rw);
    rw->Render();
    rwi->Initialize();
    rwi->Start();

}

```

![image](https://discourse.vtk.org/uploads/default/original/2X/e/e5631c96e5d5d34e4971e4698f7b9b6fec59fe8e.png)

---

<div class="post-metadata">

### Author: ![Christos\_Tsolakis](https://discourse.vtk.org/user_avatar/discourse.vtk.org/christos_tsolakis/32/2076_2.png) [@Christos\_Tsolakis](https://discourse.vtk.org/u/Christos_Tsolakis)
#### Post date: [July 27, 2022, 12:33pm UTC](https://discourse.vtk.org/t/how-can-i-stack-a-series-of-bmp-image-into-3d-view/9028/2 "2022-07-27T12:33:00Z")

</div>

> ` vtkSmartPointer <vtkImageActor> actor=vtkSmartPointer <vtkImageActor>::New();`

`vtkImageActor` is designed for images (2D data). Check this example [https://kitware.github.io/vtk-examples/site/Cxx/VolumeRendering/SmartVolumeMapper/](https://kitware.github.io/vtk-examples/site/Cxx/VolumeRendering/SmartVolumeMapper/) for setting up volume rendering for the result of your filter.

---

<div class="post-metadata">

### Author: ![BOB0Young](https://discourse.vtk.org/user_avatar/discourse.vtk.org/bob0young/32/5560_2.png) [@BOB0Young](https://discourse.vtk.org/u/BOB0Young)
#### Post date: [July 28, 2022, 7:07am UTC](https://discourse.vtk.org/t/how-can-i-stack-a-series-of-bmp-image-into-3d-view/9028/3 "2022-07-28T07:07:49Z")

</div>

With using the method given by this example, I have successfully stacked a series of jpg image into 3D view. However when I use the bmp image, some other problems arosed.

```auto
void MainWindow::ImageVolume(){
// vtkSmartPointer< vtkStringArray > fileArray = vtkSmartPointer< vtkStringArray >::New();
// char fileName[128];
// for(int i = 1; i < 100; i++)
// {
// sprintf(fileName, "/home/yanghantao/Documents/QtProject/VTK_test/Head/head%03d.jpg", i);
// std::string fileStr(fileName);
// fileArray->InsertNextValue(fileStr);
// }

// //read JPG image
// vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
// reader->SetFileNames(fileArray);
// reader->Update();

     //read bmp
        vtkSmartPointer< vtkStringArray > fileArray = vtkSmartPointer< vtkStringArray >::New();
        char fileName[128];
        for(int i = 1; i < 31; i++)
        {
            sprintf(fileName, "/home/yanghantao/Documents/ruxian/%03d_R.bmp", i);
            std::string fileStr(fileName);
            fileArray->InsertNextValue(fileStr);
        }

        vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New();
        reader->SetFileNames(fileArray);
       // reader->SetAllow8BitBMP(16);
        reader->Update();

    vtkSmartPointer <vtkSmartVolumeMapper> volumeMapper=
                    vtkSmartPointer <vtkSmartVolumeMapper>::New();
        volumeMapper->SetBlendModeToComposite();
        volumeMapper->SetInputData(reader->GetOutput());

    vtkSmartPointer <vtkVolumeProperty> volumeProperty=
                    vtkSmartPointer <vtkVolumeProperty>::New();
        volumeProperty->ShadeOff();
        volumeProperty->SetInterpolationType(VTK_LINEAR_INTERPOLATION);

    vtkSmartPointer <vtkPiecewiseFunction> compositeOpacity=
                    vtkSmartPointer <vtkPiecewiseFunction>::New();
          compositeOpacity->AddPoint(0.0, 0.0);
          compositeOpacity->AddPoint(80.0, 1.0);
          compositeOpacity->AddPoint(80.1, 0.0);
          compositeOpacity->AddPoint(255.0, 0.0);
          volumeProperty->SetScalarOpacity(compositeOpacity);

    vtkSmartPointer <vtkVolume> volume=
                    vtkSmartPointer <vtkVolume>::New();
            volume->SetMapper(volumeMapper);
            volume->SetProperty(volumeProperty);

    vtkSmartPointer <vtkRenderer> render=vtkSmartPointer <vtkRenderer>::New();
            render->SetBackground(0.1, 0.4, 0.2);
            render->AddVolume(volume);

    vtkSmartPointer <vtkRenderWindow> rw=vtkSmartPointer <vtkRenderWindow>::New();
       //rw->SetSize(512,512);
       rw->AddRenderer(render);

    vtkSmartPointer <vtkRenderWindowInteractor> rwi=vtkSmartPointer <vtkRenderWindowInteractor>::New();
       rwi->SetRenderWindow(rw);

    rw->Render();
    rwi->Initialize();
    rwi->Start();

}

```

The result of jpg image:  
 ![image](https://discourse.vtk.org/uploads/default/original/2X/9/99b647ac9e79f39b2127574cba3a4863fc37c167.png)

The preoblem of bmp image:

```auto
ERROR: In /home/yanghantao/Documents/VTK-8.2.0/Rendering/VolumeOpenGL2/vtkVolumeTexture.cxx, line 755
vtkVolumeTexture (0x12e0600): Capabilities check via proxy texture 3D allocation failed!

```

---

<div class="post-metadata">

### Author: ![BOB0Young](https://discourse.vtk.org/user_avatar/discourse.vtk.org/bob0young/32/5560_2.png) [@BOB0Young](https://discourse.vtk.org/u/BOB0Young)
#### Post date: [July 28, 2022, 7:18am UTC](https://discourse.vtk.org/t/how-can-i-stack-a-series-of-bmp-image-into-3d-view/9028/4 "2022-07-28T07:18:11Z")

</div>

if I reduce a half number of images,the program can run correctly. Maybe out of memory？If I still want to use all of the image，how can I get it？ The bmp image is 2048x2048. The jpg image is 256x256.
