Handle endianness conversion when reading pfm files

This commit is contained in:
2020-12-21 20:15:21 +01:00
parent b7230a8406
commit 4505aed2f8

View File

@@ -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;