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

Method CompressImage

Modules/DataTypesExt/src/mitkCompressedImageContainer.cpp:49–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

47}
48
49void mitk::CompressedImageContainer::CompressImage(const Image* image)
50{
51 this->ClearCompressedImageData();
52
53 if (nullptr == image)
54 return;
55
56 m_PixelType = std::make_unique<PixelType>(image->GetPixelType());
57 m_TimeGeometry = image->GetTimeGeometry()->Clone();
58 m_SliceDimensions[0] = image->GetDimension(0);
59 m_SliceDimensions[1] = image->GetDimension(1);
60 m_Dimension = image->GetDimension();
61
62 const auto numTimeSteps = m_TimeGeometry->CountTimeSteps();
63 const auto numSlices = image->GetDimension(2);
64 const auto numSliceBytes = image->GetPixelType().GetSize() * image->GetDimension(0) * image->GetDimension(1);
65
66 m_CompressedImageData.reserve(numTimeSteps);
67
68 for (std::remove_const_t<decltype(numTimeSteps)> t = 0; t < numTimeSteps; ++t)
69 {
70 CompressedTimeStepData slices;
71 slices.reserve(numSlices);
72
73 ImageReadAccessor accessor(image, image->GetVolumeData(t));
74
75 for (std::remove_const_t<decltype(numSlices)> s = 0; s < numSlices; ++s)
76 {
77 const auto* src = reinterpret_cast<const char*>(accessor.GetData()) + numSliceBytes * s;
78 char* dest = new char[numSliceBytes];
79 const auto destSize = LZ4_compress_default(src, dest, static_cast<int>(numSliceBytes), static_cast<int>(numSliceBytes));
80
81 if (0 == destSize)
82 {
83 MITK_ERROR << "LZ4 compression failed!";
84 delete[] dest;
85 slices.emplace_back(0, nullptr);
86 }
87 else
88 {
89 char* shrinkedDest = new char[destSize];
90 std::copy(dest, dest + destSize, shrinkedDest);
91 delete[] dest;
92 slices.emplace_back(destSize, shrinkedDest);
93 }
94 }
95
96 m_CompressedImageData.push_back(slices);
97 }
98}
99
100mitk::Image::Pointer mitk::CompressedImageContainer::DecompressImage() const
101{

Callers 4

TestMethod · 0.80
SegSliceOperationMethod · 0.80

Calls 8

GetPixelTypeMethod · 0.45
CloneMethod · 0.45
GetDimensionMethod · 0.45
CountTimeStepsMethod · 0.45
GetSizeMethod · 0.45
GetVolumeDataMethod · 0.45
GetDataMethod · 0.45

Tested by 1

TestMethod · 0.64