VTK  9.7.20260805
vtkHDRReader.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
14
15#ifndef vtkHDRReader_h
16#define vtkHDRReader_h
17
18#include "vtkIOImageModule.h" // For export macro
19#include "vtkImageReader.h"
20#include <string> // for std::string
21#include <vector> // for std::vector
22
23VTK_ABI_NAMESPACE_BEGIN
24class VTKIOIMAGE_EXPORT vtkHDRReader : public vtkImageReader
25{
26public:
27 static vtkHDRReader* New();
29
30 void PrintSelf(ostream& os, vtkIndent indent) override;
31
37
39
42 vtkGetMacro(Format, int);
44
46
50 vtkGetMacro(Gamma, double);
52
54
58 vtkGetMacro(Exposure, double);
60
62
66 vtkGetMacro(PixelAspect, double);
68
70
75 int CanReadFile(VTK_FILEPATH const char* fname) override;
76 int CanReadFile(vtkResourceStream* stream) override;
78
84 const char* GetFileExtensions() override { return ".hdr .pic"; }
85
89 const char* GetDescriptiveName() override { return "Radiance HDR"; }
90
91protected:
93 ~vtkHDRReader() override;
94
95 std::string ProgramType;
97 double Gamma;
98 double Exposure;
100
104 bool FlippedX = false;
105
109 bool SwappedAxis = false;
110
111 void ExecuteInformation() override;
113 bool HDRReaderUpdateSlice(float* outPtr, int* outExt);
114 void HDRReaderUpdate(vtkImageData* data, float* outPtr);
115
116 int GetWidth() const;
117 int GetHeight() const;
118
124
125 void ConvertAllDataFromRGBToXYZ(float* outPtr, int size);
126
127 void FillOutPtrRLE(int* outExt, float*& outPtr, std::vector<unsigned char>& lineBuffer);
128 void FillOutPtrNoRLE(int* outExt, float*& outPtr, std::vector<unsigned char>& lineBuffer);
129
133 void RGBE2Float(unsigned char rgbe[4], float& r, float& g, float& b);
134
140 static void XYZ2RGB(const float convertMatrix[3][3], double gamma, float& r, float& g, float& b);
141
142private:
143 vtkHDRReader(const vtkHDRReader&) = delete;
144 void operator=(const vtkHDRReader&) = delete;
145
150 bool ReadAllFileNoRLE(vtkResourceStream* stream, float* outPtr, int decrPtr, int* outExt);
151
156 bool ReadLineRLE(vtkResourceStream* stream, unsigned char* lineBufferPtr);
157
158 // Internal ExecuteInformation() validation flag
159 bool Validated = false;
160};
161VTK_ABI_NAMESPACE_END
162#endif
general representation of visualization data
const char * GetDescriptiveName() override
Return a descriptive name for the file format that might be useful in a GUI.
FormatType Format
~vtkHDRReader() override
void FillOutPtrNoRLE(int *outExt, float *&outPtr, std::vector< unsigned char > &lineBuffer)
bool FlippedX
If true, the X axis has been flipped.
int CanReadFile(vtkResourceStream *stream) override
Return 1 if, after a quick check of file header, it looks like the provided file or stream can be rea...
int CanReadFile(const char *fname) override
Return 1 if, after a quick check of file header, it looks like the provided file or stream can be rea...
void FillOutPtrRLE(int *outExt, float *&outPtr, std::vector< unsigned char > &lineBuffer)
void ConvertAllDataFromRGBToXYZ(float *outPtr, int size)
double PixelAspect
void ExecuteDataWithInformation(vtkDataObject *out, vtkInformation *outInfo) override
This is a convenience method that is implemented in many subclasses instead of RequestData.
static vtkHDRReader * New()
static void XYZ2RGB(const float convertMatrix[3][3], double gamma, float &r, float &g, float &b)
Conversion from xyz to rgb float using the 3x3 convert matrix.
bool HDRReaderUpdateSlice(float *outPtr, int *outExt)
void RGBE2Float(unsigned char rgbe[4], float &r, float &g, float &b)
Standard conversion from rgbe to float pixels.
void HDRReaderUpdate(vtkImageData *data, float *outPtr)
bool SwappedAxis
If true, the Y axis is the X, and the height and width has been swapped.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetWidth() const
void ExecuteInformation() override
bool ReadHeaderData()
Read the header data and fill attributes of HDRReader, as well as DataExtent.
int GetHeight() const
const char * GetFileExtensions() override
Get the file extensions for this format.
std::string ProgramType
double Exposure
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:29
Store vtkAlgorithm input/output information.
Abstract class used for custom streams.
#define VTK_FILEPATH