Add PfmImage and PnmImage classes

This commit is contained in:
2020-12-25 00:24:25 +01:00
parent af8bd16e51
commit b14f691466
2 changed files with 29 additions and 17 deletions

View File

@@ -84,16 +84,22 @@ namespace openVulkanoCpp
{
return GetElementCount() * sizeof(float);
}
};
static std::pair<PfmHeader, std::unique_ptr<float[]>> ReadImage(std::istream& inStream)
struct PfmImage
{
std::pair<PfmHeader, std::unique_ptr<float[]>> image;
inStream >> image.first;
size_t size = image.first.GetElementCount();
PfmHeader header;
std::unique_ptr<float[]> image;
if (Utils::IsLittleEndian() != image.first.littleEndian)
static PfmImage ReadImage(std::istream& inStream)
{
char* data = reinterpret_cast<char*>(image.second.get());
PfmImage image;
inStream >> image.header;
size_t size = image.header.GetElementCount();
if (Utils::IsLittleEndian() != image.header.littleEndian)
{
char* data = reinterpret_cast<char*>(image.image.get());
for(size_t i = 0; i < size; i++)
{
size_t idx = i * sizeof(float);
@@ -101,9 +107,9 @@ namespace openVulkanoCpp
}
}
image.second = std::make_unique<float[]>(size);
inStream.read(reinterpret_cast<char*>(image.second.get()), size);
image.image = std::make_unique<float[]>(size);
inStream.read(reinterpret_cast<char*>(image.image.get()), size);
return image;
};
}
};
}

View File

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