MCPcopy Create free account
hub / github.com/ARM-software/astc-encoder / SaveEXRImageToFile

Function SaveEXRImageToFile

Source/ThirdParty/tinyexr.h:9598–9666  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9596}
9597
9598int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
9599 const char *filename, const char **err) {
9600 if (exr_image == NULL || filename == NULL ||
9601 exr_header->compression_type < 0) {
9602 tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToFile", err);
9603 return TINYEXR_ERROR_INVALID_ARGUMENT;
9604 }
9605
9606#if !TINYEXR_USE_PIZ
9607 if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
9608 tinyexr::SetErrorMessage("PIZ compression is not supported in this build",
9609 err);
9610 return TINYEXR_ERROR_UNSUPPORTED_FEATURE;
9611 }
9612#endif
9613
9614#if !TINYEXR_USE_ZFP
9615 if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
9616 tinyexr::SetErrorMessage("ZFP compression is not supported in this build",
9617 err);
9618 return TINYEXR_ERROR_UNSUPPORTED_FEATURE;
9619 }
9620#endif
9621
9622 FILE *fp = NULL;
9623#ifdef _WIN32
9624#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang
9625 errno_t errcode =
9626 _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
9627 if (errcode != 0) {
9628 tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
9629 err);
9630 return TINYEXR_ERROR_CANT_WRITE_FILE;
9631 }
9632#else
9633 // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
9634 fp = fopen(filename, "wb");
9635#endif
9636#else
9637 fp = fopen(filename, "wb");
9638#endif
9639 if (!fp) {
9640 tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
9641 err);
9642 return TINYEXR_ERROR_CANT_WRITE_FILE;
9643 }
9644
9645 unsigned char *mem = NULL;
9646 size_t mem_size = SaveEXRImageToMemory(exr_image, exr_header, &mem, err);
9647 if (mem_size == 0) {
9648 fclose(fp);
9649 return TINYEXR_ERROR_SERIALIZATION_FAILED;
9650 }
9651
9652 size_t written_size = 0;
9653 if ((mem_size > 0) && mem) {
9654 written_size = fwrite(mem, 1, mem_size, fp);
9655 }

Callers 1

SaveEXRFunction · 0.85

Calls 3

SetErrorMessageFunction · 0.85
UTF8ToWcharFunction · 0.85
SaveEXRImageToMemoryFunction · 0.85

Tested by

no test coverage detected