diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-05-16 14:42:04 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-05-16 16:20:23 +0300 |
commit | 29a3f43da5d3423769f4871baad900a6e2f68942 (patch) | |
tree | 833a6fbb5d76a910fe3d051471b530f518123ac6 /source/blender/blenkernel/intern/image_save.cc | |
parent | adf183eeaeaba4eeeea31353e4a939f7a5c5c9fc (diff) |
Python API: make Image.save and Image.save_render more consistent with operator
Previously these only supported a subset of what the save operator could do,
for example no multilayer or stereo saving, no proper color management. Now
share code with the image save operator so it's more consistent.
Diffstat (limited to 'source/blender/blenkernel/intern/image_save.cc')
-rw-r--r-- | source/blender/blenkernel/intern/image_save.cc | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/image_save.cc b/source/blender/blenkernel/intern/image_save.cc index a4c48c90d17..46407f622ba 100644 --- a/source/blender/blenkernel/intern/image_save.cc +++ b/source/blender/blenkernel/intern/image_save.cc @@ -78,14 +78,21 @@ bool BKE_image_save_options_init(ImageSaveOptions *opts, Scene *scene, Image *ima, ImageUser *iuser, - const bool guess_path, - const bool save_as_render) + const bool guess_path) { + /* For saving a tiled image we need an iuser, so use a local one if there isn't already one. */ + ImageUser save_iuser; + if (iuser == nullptr) { + BKE_imageuser_default(&save_iuser); + iuser = &save_iuser; + iuser->scene = scene; + } + memset(opts, 0, sizeof(*opts)); opts->bmain = bmain; opts->scene = scene; - opts->save_as_render = save_as_render; + opts->save_as_render = ima->source == IMA_SRC_VIEWER; BKE_image_format_init(&opts->im_format, false); @@ -126,7 +133,7 @@ bool BKE_image_save_options_init(ImageSaveOptions *opts, } /* Default to saving in the same colorspace as the image setting. */ - if (!save_as_render) { + if (!opts->save_as_render) { BKE_color_managed_colorspace_settings_copy(&opts->im_format.linear_colorspace_settings, &ima->colorspace_settings); } @@ -161,7 +168,7 @@ bool BKE_image_save_options_init(ImageSaveOptions *opts, /* check for empty path */ if (guess_path && opts->filepath[0] == 0) { const bool is_prev_save = !STREQ(G.ima, "//"); - if (save_as_render) { + if (opts->save_as_render) { if (is_prev_save) { BLI_strncpy(opts->filepath, G.ima, sizeof(opts->filepath)); } @@ -596,8 +603,13 @@ static bool image_save_single(ReportList *reports, bool BKE_image_save( ReportList *reports, Main *bmain, Image *ima, ImageUser *iuser, ImageSaveOptions *opts) { + /* For saving a tiled image we need an iuser, so use a local one if there isn't already one. */ ImageUser save_iuser; - BKE_imageuser_default(&save_iuser); + if (iuser == nullptr) { + BKE_imageuser_default(&save_iuser); + iuser = &save_iuser; + iuser->scene = opts->scene; + } bool colorspace_changed = false; @@ -614,12 +626,6 @@ bool BKE_image_save( opts->filepath); return false; } - - /* For saving a tiled image we need an iuser, so use a local one if there isn't already one. - */ - if (iuser == nullptr) { - iuser = &save_iuser; - } } /* Save images */ |