MCPcopy Create free account
hub / github.com/MITK/MITK / GetPixmapFromImageNode

Function GetPixmapFromImageNode

Modules/QtWidgets/src/QmitkNodeSelectionButton.cpp:33–117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31#include <QTextDocument>
32
33QPixmap GetPixmapFromImageNode(const mitk::DataNode* dataNode, int height)
34{
35 if (nullptr == dataNode)
36 {
37 return QPixmap();
38 }
39
40 const mitk::Image* image = nullptr;
41
42 const mitk::MultiLabelSegmentation* segmentation = dynamic_cast<const mitk::MultiLabelSegmentation*>(dataNode->GetData());
43 if (nullptr != segmentation && segmentation->GetNumberOfGroups()>0)
44 {
45 image = segmentation->GetGroupImage(0);
46 }
47
48 if (nullptr == image) image = dynamic_cast<const mitk::Image*>(dataNode->GetData());
49
50 if ((nullptr == image || !image->IsInitialized()) || // -> must be an image
51 (image->GetPixelType().GetNumberOfComponents() != 1)) // -> for now only single component are allowed
52 {
53 auto descManager = QmitkNodeDescriptorManager::GetInstance();
54 auto desc = descManager->GetDescriptor(dataNode);
55 auto icon = desc->GetIcon(dataNode);
56 auto fallBackMap = icon.pixmap(height, height);
57 return fallBackMap;
58 }
59
60 mitk::PlaneGeometry::Pointer planeGeometry = mitk::PlaneGeometry::New();
61 int sliceNumber = image->GetDimension(2) / 2;
62 planeGeometry->InitializeStandardPlane(image->GetGeometry(), mitk::AnatomicalPlane::Axial, sliceNumber);
63
64 mitk::ExtractSliceFilter::Pointer extractSliceFilter = mitk::ExtractSliceFilter::New();
65 extractSliceFilter->SetInput(image);
66 extractSliceFilter->SetInterpolationMode(mitk::ExtractSliceFilter::RESLICE_NEAREST);
67 extractSliceFilter->SetResliceTransformByGeometry(image->GetGeometry());
68 extractSliceFilter->SetWorldGeometry(planeGeometry);
69 extractSliceFilter->SetOutputDimensionality(2);
70 extractSliceFilter->SetVtkOutputRequest(true);
71 extractSliceFilter->Update();
72
73 vtkImageData* imageData = extractSliceFilter->GetVtkOutput();
74
75 vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
76
77 if (nullptr != segmentation)
78 {
79 lookupTable->DeepCopy(const_cast<vtkLookupTable*>(segmentation->GetLookupTable()->GetVtkLookupTable().GetPointer()));
80 lookupTable->SetTableValue(0, 0., 0., 0.);
81 }
82 else
83 {
84 mitk::LevelWindow levelWindow;
85 dataNode->GetLevelWindow(levelWindow);
86 lookupTable->SetRange(levelWindow.GetLowerWindowBound(), levelWindow.GetUpperWindowBound());
87 lookupTable->SetSaturationRange(0.0, 0.0);
88 lookupTable->SetValueRange(0.0, 1.0);
89 lookupTable->SetHueRange(0.0, 0.0);
90 lookupTable->SetRampToLinear();

Callers 1

paintEventMethod · 0.85

Calls 15

GetNumberOfGroupsMethod · 0.80
GetNumberOfComponentsMethod · 0.80
GetGeometryMethod · 0.80
DeepCopyMethod · 0.80
GetPointerMethod · 0.80
GetVtkLookupTableMethod · 0.80
GetLevelWindowMethod · 0.80
GetLowerWindowBoundMethod · 0.80
GetUpperWindowBoundMethod · 0.80
SetMinOpacityMethod · 0.80
SetMaxOpacityMethod · 0.80

Tested by

no test coverage detected