Add convenience Read methods

This commit is contained in:
2020-12-27 11:00:33 +01:00
parent 265003ebb9
commit 6d2d827f19
2 changed files with 26 additions and 16 deletions

View File

@@ -90,15 +90,14 @@ namespace openVulkanoCpp
PfmHeader header;
std::unique_ptr<float[]> image;
static PfmImage ReadImage(std::istream& inStream)
void Read(std::istream& inStream)
{
PfmImage image;
inStream >> image.header;
size_t size = image.header.GetElementCount();
inStream >> header;
size_t size = header.GetElementCount();
if (Utils::IsLittleEndian() != image.header.littleEndian)
if (Utils::IsLittleEndian() != header.littleEndian)
{
char* data = reinterpret_cast<char*>(image.image.get());
char* data = reinterpret_cast<char*>(image.get());
for(size_t i = 0; i < size; i++)
{
size_t idx = i * sizeof(float);
@@ -106,8 +105,14 @@ namespace openVulkanoCpp
}
}
image.image = std::make_unique<float[]>(size);
inStream.read(reinterpret_cast<char*>(image.image.get()), size);
image = std::make_unique<float[]>(size);
inStream.read(reinterpret_cast<char*>(image.get()), size);
}
static PfmImage ReadImage(std::istream& inStream)
{
PfmImage image;
image.Read(inStream);
return image;
}
};

View File

@@ -109,17 +109,22 @@ namespace openVulkanoCpp
PnmHeader header;
std::unique_ptr<char[]> image;
void Read(std::istream& inStream)
{
inStream >> header;
// TODO handle ascii mode
if (header.ascii) throw std::runtime_error("ascii mode not supported!");
size_t size = header.GetImageSize();
image = std::make_unique<char[]>(size);
inStream.read(image.get(), size);
}
static PnmImage ReadImage(std::istream& inStream)
{
PnmImage image;
inStream >> image.header;
// TODO handle ascii mode
if (image.header.ascii) throw std::runtime_error("ascii mode not supported!");
size_t size = image.header.GetImageSize();
image.image = std::make_unique<char[]>(size);
inStream.read(image.image.get(), size);
image.Read(inStream);
return image;
}
};