MCPcopy Create free account
hub / github.com/cinder/Cinder / SaveEXRImageToFile

Function SaveEXRImageToFile

include/tinyexr/tinyexr.h:8079–8147  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 2

finalizeMethod · 0.85
SaveEXRFunction · 0.85

Calls 5

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

Tested by

no test coverage detected