MCPcopy Create free account
hub / github.com/OpenPathGuidingLibrary/openpgl / SaveEXRImageToFile

Function SaveEXRImageToFile

third-party/tinyexr/tinyexr.h:7995–8063  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7993}
7994
7995int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
7996 const char *filename, const char **err) {
7997 if (exr_image == NULL || filename == NULL ||
7998 exr_header->compression_type < 0) {
7999 tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToFile", err);
8000 return TINYEXR_ERROR_INVALID_ARGUMENT;
8001 }
8002
8003#if !TINYEXR_USE_PIZ
8004 if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
8005 tinyexr::SetErrorMessage("PIZ compression is not supported in this build",
8006 err);
8007 return TINYEXR_ERROR_UNSUPPORTED_FEATURE;
8008 }
8009#endif
8010
8011#if !TINYEXR_USE_ZFP
8012 if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
8013 tinyexr::SetErrorMessage("ZFP compression is not supported in this build",
8014 err);
8015 return TINYEXR_ERROR_UNSUPPORTED_FEATURE;
8016 }
8017#endif
8018
8019 FILE *fp = NULL;
8020#ifdef _WIN32
8021#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang
8022 errno_t errcode =
8023 _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
8024 if (errcode != 0) {
8025 tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
8026 err);
8027 return TINYEXR_ERROR_CANT_WRITE_FILE;
8028 }
8029#else
8030 // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
8031 fp = fopen(filename, "wb");
8032#endif
8033#else
8034 fp = fopen(filename, "wb");
8035#endif
8036 if (!fp) {
8037 tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
8038 err);
8039 return TINYEXR_ERROR_CANT_WRITE_FILE;
8040 }
8041
8042 unsigned char *mem = NULL;
8043 size_t mem_size = SaveEXRImageToMemory(exr_image, exr_header, &mem, err);
8044 if (mem_size == 0) {
8045 fclose(fp);
8046 return TINYEXR_ERROR_SERIALIZATION_FAILED;
8047 }
8048
8049 size_t written_size = 0;
8050 if ((mem_size > 0) && mem) {
8051 written_size = fwrite(mem, 1, mem_size, fp);
8052 }

Callers 2

storeFunction · 0.85
SaveEXRFunction · 0.85

Calls 3

SetErrorMessageFunction · 0.85
UTF8ToWcharFunction · 0.85
SaveEXRImageToMemoryFunction · 0.85

Tested by

no test coverage detected