MCPcopy Create free account
hub / github.com/RenderKit/embree / SaveEXRImageToFile

Function SaveEXRImageToFile

tutorials/common/image/tinyexr.h:8084–8152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8082}
8083
8084int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
8085 const char *filename, const char **err) {
8086 if (exr_image == NULL || filename == NULL ||
8087 exr_header->compression_type < 0) {
8088 tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToFile", err);
8089 return TINYEXR_ERROR_INVALID_ARGUMENT;
8090 }
8091
8092#if !TINYEXR_USE_PIZ
8093 if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
8094 tinyexr::SetErrorMessage("PIZ compression is not supported in this build",
8095 err);
8096 return TINYEXR_ERROR_UNSUPPORTED_FEATURE;
8097 }
8098#endif
8099
8100#if !TINYEXR_USE_ZFP
8101 if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
8102 tinyexr::SetErrorMessage("ZFP compression is not supported in this build",
8103 err);
8104 return TINYEXR_ERROR_UNSUPPORTED_FEATURE;
8105 }
8106#endif
8107
8108 FILE *fp = NULL;
8109#ifdef _WIN32
8110#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang
8111 errno_t errcode =
8112 _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
8113 if (errcode != 0) {
8114 tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
8115 err);
8116 return TINYEXR_ERROR_CANT_WRITE_FILE;
8117 }
8118#else
8119 // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
8120 fp = fopen(filename, "wb");
8121#endif
8122#else
8123 fp = fopen(filename, "wb");
8124#endif
8125 if (!fp) {
8126 tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
8127 err);
8128 return TINYEXR_ERROR_CANT_WRITE_FILE;
8129 }
8130
8131 unsigned char *mem = NULL;
8132 size_t mem_size = SaveEXRImageToMemory(exr_image, exr_header, &mem, err);
8133 if (mem_size == 0) {
8134 fclose(fp);
8135 return TINYEXR_ERROR_SERIALIZATION_FAILED;
8136 }
8137
8138 size_t written_size = 0;
8139 if ((mem_size > 0) && mem) {
8140 written_size = fwrite(mem, 1, mem_size, fp);
8141 }

Callers 1

SaveEXRFunction · 0.85

Calls 4

SetErrorMessageFunction · 0.85
UTF8ToWcharFunction · 0.85
SaveEXRImageToMemoryFunction · 0.85
c_strMethod · 0.45

Tested by

no test coverage detected