Handle endianness conversion when reading pfm files
This commit is contained in:
@@ -73,22 +73,34 @@ namespace openVulkanoCpp
|
||||
return inStream;
|
||||
}
|
||||
|
||||
constexpr size_t GetImageSize() const
|
||||
constexpr size_t GetElementCount() const
|
||||
{
|
||||
size_t size = height * width * sizeof(float);
|
||||
size_t size = height * width;
|
||||
if (color) size *= 3;
|
||||
return size;
|
||||
}
|
||||
|
||||
constexpr size_t GetImageSize() const
|
||||
{
|
||||
return GetElementCount() * sizeof(float);
|
||||
}
|
||||
|
||||
static std::pair<PfmHeader, std::unique_ptr<float[]>> ReadImage(std::istream& inStream)
|
||||
{
|
||||
std::pair<PfmHeader, std::unique_ptr<float[]>> image;
|
||||
inStream >> image.first;
|
||||
size_t size = image.first.GetElementCount();
|
||||
|
||||
if (Utils::IsLittleEndian() != image.first.littleEndian)
|
||||
throw std::runtime_error("Conversion support for endianness not implemented");
|
||||
{
|
||||
char* data = reinterpret_cast<char*>(image.second.get());
|
||||
for(size_t i = 0; i < size; i++)
|
||||
{
|
||||
size_t idx = i * sizeof(float);
|
||||
std::reverse(&data[idx], &data[idx + sizeof(float)]);
|
||||
}
|
||||
}
|
||||
|
||||
size_t size = image.first.height * image.first.width;
|
||||
image.second = std::make_unique<float[]>(size);
|
||||
inStream.read(reinterpret_cast<char*>(image.second.get()), size);
|
||||
return image;
|
||||
|
||||
Reference in New Issue
Block a user