diff --git a/openVulkanoCpp/Image/ImageLoaderJpeg.cpp b/openVulkanoCpp/Image/ImageLoaderJpeg.cpp index f9daec4..3d1275b 100644 --- a/openVulkanoCpp/Image/ImageLoaderJpeg.cpp +++ b/openVulkanoCpp/Image/ImageLoaderJpeg.cpp @@ -5,7 +5,9 @@ */ #include "ImageLoaderJpeg.hpp" -#include +#include "Base/Utils.hpp" +#include "Base/Logger.hpp" +#include "Data/Containers/Array.hpp" #include #include @@ -20,10 +22,8 @@ namespace OpenVulkano::Image { std::unique_ptr ImageLoaderJpeg::loadFromFile(const std::string& filePath) { - std::ifstream file(filePath, std::ios::binary); - if (!file) { throw std::runtime_error("Could not open file: " + filePath); } - std::vector buffer((std::istreambuf_iterator(file)), std::istreambuf_iterator()); - return loadJpeg(buffer.data(), buffer.size()); + const auto file = Utils::ReadFile(filePath); + return loadJpeg(reinterpret_cast(file.Data()), file.Size()); } std::unique_ptr ImageLoaderJpeg::loadFromMemory(const std::vector& buffer) @@ -35,21 +35,31 @@ namespace OpenVulkano::Image { Image result; - int rows, cols; + int rows = 0, cols = 0; #if __has_include("turbojpeg.h") { unsigned char* compressedImage = const_cast(data); - int jpegSubsamp; + int jpegSubsamp = 0; tjhandle jpegDecompressor = tjInitDecompress(); - tjDecompressHeader2(jpegDecompressor, compressedImage, size, &cols, &rows, &jpegSubsamp); + if (!jpegDecompressor) + { + Logger::FILESYS->error("Failed to read jpeg header. Error: {}", tjGetErrorStr()); + return nullptr; + } + int status = tjDecompressHeader2(jpegDecompressor, compressedImage, size, &cols, &rows, &jpegSubsamp); + if (status != 0) + { + Logger::FILESYS->error("Failed to read jpeg header. Error: {}", tjGetErrorStr()); + return nullptr; + } const int channels = 4; result.data = OpenVulkano::Array(cols * rows * channels); - result.dataFormat = OpenVulkano::DataFormat::R8G8B8A8_UINT; + result.dataFormat = OpenVulkano::DataFormat::B8G8R8A8_UINT; tjDecompress2(jpegDecompressor, compressedImage, size, result.data.Data(), cols, 0 /*pitch*/, rows, - TJPF_RGBA, TJFLAG_FASTDCT); + TJPF_BGRA, TJFLAG_FASTDCT); tjDestroy(jpegDecompressor); } #else @@ -69,4 +79,4 @@ namespace OpenVulkano::Image return std::make_unique(std::move(result)); } -} \ No newline at end of file +}