Transparency
VTKExamples/Cxx/Images/Transparency
Description¶
This example creates a half transparent, half green mask and overlays it on top of an input image.
Seealso
Code¶
Transparency.cxx
#include <vtkSmartPointer.h> #include <vtkImageMapToColors.h> #include <vtkImageReader2Factory.h> #include <vtkImageReader2.h> #include <vtkLookupTable.h> #include <vtkImageMapper3D.h> #include <vtkImageData.h> #include <vtkPointData.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkInteractorStyleImage.h> #include <vtkRenderer.h> #include <vtkImageActor.h> int main(int argc, char* argv[]) { // Verify input arguments if ( argc != 2 ) { std::cout << "Usage: " << argv[0] << " Filename(.jpg)" << std::endl; return EXIT_FAILURE; } // Read the image vtkSmartPointer<vtkImageReader2Factory> readerFactory = vtkSmartPointer<vtkImageReader2Factory>::New(); vtkSmartPointer<vtkImageReader2> reader = readerFactory->CreateImageReader2(argv[1]); reader->SetFileName(argv[1]); reader->Update(); vtkImageData* image = reader->GetOutput(); // Create a mask - half of the image should be transparent and the other half opaque vtkSmartPointer<vtkImageData> maskImage = vtkSmartPointer<vtkImageData>::New(); int extent[6]; image->GetExtent(extent); maskImage->SetExtent(extent); maskImage->AllocateScalars(VTK_DOUBLE,1); for (int y = extent[2]; y < extent[3]; y++) { for (int x = extent[0]; x < extent[1]; x++) { double* pixel = static_cast<double*>(maskImage->GetScalarPointer(x,y,0)); if(y > (extent[3]-extent[2])/2.0) { pixel[0] = 0.0; } else { pixel[0] = 1.0; } } } vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New(); lookupTable->SetNumberOfTableValues(2); lookupTable->SetRange(0.0,1.0); lookupTable->SetTableValue( 0, 0.0, 0.0, 0.0, 0.0 ); //label 0 is transparent lookupTable->SetTableValue( 1, 0.0, 1.0, 0.0, 1.0 ); //label 1 is opaque and green lookupTable->Build(); vtkSmartPointer<vtkImageMapToColors> mapTransparency = vtkSmartPointer<vtkImageMapToColors>::New(); mapTransparency->SetLookupTable(lookupTable); mapTransparency->PassAlphaToOutputOn(); mapTransparency->SetInputData(maskImage); // Create actors vtkSmartPointer<vtkImageActor> imageActor = vtkSmartPointer<vtkImageActor>::New(); imageActor->GetMapper()->SetInputData(image); vtkSmartPointer<vtkImageActor> maskActor = vtkSmartPointer<vtkImageActor>::New(); maskActor->GetMapper()->SetInputConnection( mapTransparency->GetOutputPort()); // Visualize vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(imageActor); renderer->AddActor(maskActor); renderer->ResetCamera(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindow->Render(); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
CMakeLists.txt¶
cmake_minimum_required(VERSION 3.3 FATAL_ERROR) project(Transparency) find_package(VTK COMPONENTS vtkCommonCore vtkCommonDataModel vtkIOImage vtkImagingCore vtkInteractionStyle vtkRenderingContextOpenGL2 vtkRenderingCore vtkRenderingFreeType vtkRenderingGL2PSOpenGL2 vtkRenderingOpenGL2 QUIET) if (NOT VTK_FOUND) message("Skipping Transparency: ${VTK_NOT_FOUND_MESSAGE}") return () endif() message (STATUS "VTK_VERSION: ${VTK_VERSION}") if (VTK_VERSION VERSION_LESS "8.90.0") # old system include(${VTK_USE_FILE}) add_executable(Transparency MACOSX_BUNDLE Transparency.cxx ) target_link_libraries(Transparency PRIVATE ${VTK_LIBRARIES}) else () # include all components add_executable(Transparency MACOSX_BUNDLE Transparency.cxx ) target_link_libraries(Transparency PRIVATE ${VTK_LIBRARIES}) # vtk_module_autoinit is needed vtk_module_autoinit( TARGETS Transparency MODULES ${VTK_LIBRARIES} ) endif ()
Download and Build Transparency¶
Click here to download Transparency and its CMakeLists.txt file. Once the tarball Transparency.tar has been downloaded and extracted,
cd Transparency/build
If VTK is installed:
cmake ..
If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..
Build the project:
make
and run it:
./Transparency
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.