void mergeMasks(Mask2Merged mask, vtkSmartPointer<vtkImageData>& mergedMask)
{
mergedMask = vtkSmartPointer<vtkImageData>::New();
int dimensions[3] = { 0 };
int fullsize = 0;
unsigned char c = mask.label;
for (int i = 0; i < mask.maskPaths.size(); ++i)
{
vtkSmartPointer<vtkImageData> maskData = nullptr;
loadImageData(mask.maskPaths[i].c_str(), maskData);
if (0 == i)
{
mergedMask->SetOrigin(maskData->GetOrigin());
mergedMask->SetSpacing(maskData->GetSpacing());
mergedMask->SetDimensions(maskData->GetDimensions());
mergedMask->AllocateScalars(VTK_UNSIGNED_CHAR, 1);
maskData->GetDimensions(dimensions);
auto mergedMaskPtr = (unsigned char*)mergedMask->GetScalarPointer();
fullsize = dimensions[0] * dimensions[1] * dimensions[2];
memset(mergedMaskPtr, 0, fullsize);
}
else
{
for (int m = 0; m < 3; m++)
{
if (dimensions[m] != maskData->GetDimensions()[m])
{
std::cout << mask.maskPaths[i] << ", dimension is not correct!";
return;
}
}
}
auto maskPtr = (unsigned char*)maskData->GetScalarPointer();
auto mergedMaskPtr = (unsigned char*)mergedMask->GetScalarPointer();
for (int m = 0; m < fullsize; ++m)
{
if (maskPtr[m] > 0)
{
mergedMaskPtr[m] = c;
}
}
}
}