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

Function SaveEXRMultipartImageToFile

third-party/tinyexr/tinyexr.h:8078–8133  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 3

SetErrorMessageFunction · 0.85
UTF8ToWcharFunction · 0.85

Tested by

no test coverage detected