Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2022-06-30 16:31:12 +0300
committerSergey Sharybin <sergey@blender.org>2022-07-01 10:44:07 +0300
commitdfa5bd689e470ad9b8fc7328927afdbe0159e0c1 (patch)
treeca7919b975de15ad15cad67204c2c3e07b7ad09b /source/blender/blenkernel/intern/image.cc
parentc922b9e2c145b0c945fdb9d99f1209df3bf8bad0 (diff)
Fix possible wrong image color space when it is created from image buffer
From quick look it doesn't seem to be leading to real issues yet as the image buffers are created with the default roles, but valid color space is needed to be ensured for an upcoming development.
Diffstat (limited to 'source/blender/blenkernel/intern/image.cc')
-rw-r--r--source/blender/blenkernel/intern/image.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc
index ed8652ca470..b6294eb058c 100644
--- a/source/blender/blenkernel/intern/image.cc
+++ b/source/blender/blenkernel/intern/image.cc
@@ -1172,6 +1172,33 @@ Image *BKE_image_add_generated(Main *bmain,
return ima;
}
+static void image_colorspace_from_imbuf(Image *image, const ImBuf *ibuf)
+{
+ const char *colorspace_name = NULL;
+
+ if (ibuf->rect_float) {
+ if (ibuf->float_colorspace) {
+ colorspace_name = IMB_colormanagement_colorspace_get_name(ibuf->float_colorspace);
+ }
+ else {
+ colorspace_name = IMB_colormanagement_role_colorspace_name_get(COLOR_ROLE_DEFAULT_FLOAT);
+ }
+ }
+
+ if (ibuf->rect && !colorspace_name) {
+ if (ibuf->rect_colorspace) {
+ colorspace_name = IMB_colormanagement_colorspace_get_name(ibuf->rect_colorspace);
+ }
+ else {
+ colorspace_name = IMB_colormanagement_role_colorspace_name_get(COLOR_ROLE_DEFAULT_BYTE);
+ }
+ }
+
+ if (colorspace_name) {
+ STRNCPY(image->colorspace_settings.name, colorspace_name);
+ }
+}
+
Image *BKE_image_add_from_imbuf(Main *bmain, ImBuf *ibuf, const char *name)
{
if (name == nullptr) {
@@ -1199,6 +1226,7 @@ Image *BKE_image_add_from_imbuf(Main *bmain, ImBuf *ibuf, const char *name)
}
image_assign_ibuf(ima, ibuf, IMA_NO_INDEX, 0);
+ image_colorspace_from_imbuf(ima, ibuf);
/* Consider image dirty since its content can not be re-created unless the image is explicitly
* saved. */