MCPcopy Create free account
hub / github.com/Kitware/VTK / LoadImageData

Method LoadImageData

IO/Geometry/vtkGLTFDocumentLoader.cxx:836–954  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

834
835//------------------------------------------------------------------------------
836bool vtkGLTFDocumentLoader::LoadImageData()
837{
838 if (!this->LoadImages)
839 {
840 // Skip loading model images
841 return true;
842 }
843 vtkNew<vtkImageReader2Factory> factory;
844 size_t numberOfMeshes = this->InternalModel->Meshes.size();
845 size_t numberOfImages = this->InternalModel->Images.size();
846 for (size_t i = 0; i < numberOfImages; i++)
847 {
848 auto& image = this->InternalModel->Images[i];
849 vtkSmartPointer<vtkImageReader2> reader = nullptr;
850 image.ImageData = vtkSmartPointer<vtkImageData>::New();
851 std::vector<std::uint8_t> buffer;
852 vtkNew<vtkMemoryResourceStream> imgStream;
853
854 // If image is defined via bufferview index
855 if (image.BufferView >= 0 &&
856 image.BufferView < static_cast<int>(this->InternalModel->BufferViews.size()))
857 {
858 // mime-type must be defined with BufferView to get appropriate reader here (only two possible
859 // values)
860 if (image.MimeType == "image/jpeg")
861 {
862 reader = vtkSmartPointer<vtkJPEGReader>::New();
863 }
864 else if (image.MimeType == "image/png")
865 {
866 reader = vtkSmartPointer<vtkPNGReader>::New();
867 }
868 else
869 {
870 // Extensions allow other image types.
871 // It is perfectly valid to declare other extension-supported image types
872 // so long as they are never required by the scene. Therefore, the possible
873 // error is deferred until later.
874 image.ImageData = nullptr;
875 continue;
876 }
877
878 BufferView& bufferView = this->InternalModel->BufferViews[image.BufferView];
879 int bufferId = bufferView.Buffer;
880 if (bufferId < 0 || bufferId >= static_cast<int>(this->InternalModel->Buffers.size()))
881 {
882 vtkErrorMacro("Invalid bufferView.buffer value for bufferView " << bufferView.Name);
883 return false;
884 }
885 imgStream->SetBuffer(this->InternalModel->Buffers[bufferId].data() + bufferView.ByteOffset,
886 this->InternalModel->Buffers[bufferId].size());
887 }
888 else // If image is defined via uri
889 {
890 auto stream = this->InternalModel->URILoader->Load(image.Uri);
891 if (!stream)
892 {
893 vtkErrorMacro("Invalid Uri:" << image.Uri);

Callers 1

LoadModelDataMethod · 0.95

Calls 15

InvokeEventMethod · 0.80
NewFunction · 0.50
equalFunction · 0.50
sizeMethod · 0.45
SetBufferMethod · 0.45
dataMethod · 0.45
LoadMethod · 0.45
resizeMethod · 0.45
ReadMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
SeekMethod · 0.45

Tested by

no test coverage detected