VTK/Examples/Cxx/Images/ImageText

From KitwarePublic

Jump to: navigation, search

This example demonstrates how to draw text onto an image.

ImageText.cxx

#include <vtkImageBlend.h>
#include <vtkImageData.h>
#include <vtkPointData.h>
#include <vtkPNGWriter.h>
#include <vtkSmartPointer.h>
#include <vtkFreeTypeUtilities.h>
#include <vtkTextProperty.h>
#include <vtkImageCanvasSource2D.h>
 
// must build VTK with VTK_USE_SYSTEM_FREETYPE=ON
 
int main(int argc, char* argv[])
{
  // Create a black image with a red circle of radius 5 centered at (9,10)
  vtkSmartPointer<vtkImageCanvasSource2D> drawing = 
    vtkSmartPointer<vtkImageCanvasSource2D>::New();
  drawing->SetScalarTypeToUnsignedChar();
  drawing->SetNumberOfScalarComponents(3);
  drawing->SetExtent(0, 100, 0, 200, 0, 0);
  drawing->FillBox(0,20,0,50);
  drawing->SetDrawColor(255, 0, 0, 0);
  drawing->DrawCircle(9, 10, 5);
  drawing->Update();
 
  // Create an image of text
  vtkSmartPointer<vtkFreeTypeUtilities> freeType = vtkSmartPointer<vtkFreeTypeUtilities>::New();
  vtkSmartPointer<vtkTextProperty> textProperty = vtkSmartPointer<vtkTextProperty>::New();
  textProperty->SetColor( 0.0,0.0,1.0 ); // blue
  textProperty->SetFontSize(10);
 
  vtkSmartPointer<vtkImageData> textImage = vtkSmartPointer<vtkImageData>::New();
  freeType->RenderString(textProperty, "Test String", 20, 40, textImage);
 
  // Combine the images
  vtkSmartPointer<vtkImageBlend> blend =
    vtkSmartPointer<vtkImageBlend>::New();
  blend->AddInputConnection(drawing->GetOutputPort());
  blend->AddInputConnection(textImage->GetProducerPort());
  blend->SetOpacity(0,.5);
  blend->SetOpacity(1,.5);
  blend->Update();  
 
  vtkSmartPointer<vtkPNGWriter> writer =
    vtkSmartPointer<vtkPNGWriter>::New();
  writer->SetFileName("output.png");
  writer->SetInputConnection(blend->GetOutputPort());
  writer->Write();
 
  return EXIT_SUCCESS;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
 
PROJECT(ImageText)
 
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
 
if (APPLE)
  add_executable(ImageText MACOSX_BUNDLE ImageText.cxx)
else()
  add_executable(ImageText ImageText.cxx)
endif()
 
if(VTK_LIBRARIES)
  target_link_libraries(ImageText ${VTK_LIBRARIES})
else()
  target_link_libraries(ImageText vtkHybrid )
endif()
Personal tools