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.
This commit is contained in:
Sergey Sharybin 2022-06-30 15:31:12 +02:00
parent c922b9e2c1
commit dfa5bd689e
3 changed files with 34 additions and 0 deletions

View File

@ -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. */

View File

@ -341,6 +341,7 @@ const char *IMB_colormanagement_look_get_indexed_name(int index);
int IMB_colormanagement_colorspace_get_named_index(const char *name);
const char *IMB_colormanagement_colorspace_get_indexed_name(int index);
const char *IMB_colormanagement_colorspace_get_name(const struct ColorSpace *colorspace);
const char *IMB_colormanagement_view_get_default_name(const char *display_name);
void IMB_colormanagement_colorspace_from_ibuf_ftype(

View File

@ -3174,6 +3174,11 @@ const char *IMB_colormanagement_colorspace_get_indexed_name(int index)
return "";
}
const char *IMB_colormanagement_colorspace_get_name(const ColorSpace *colorspace)
{
return colorspace->name;
}
void IMB_colormanagement_colorspace_from_ibuf_ftype(
ColorManagedColorspaceSettings *colorspace_settings, ImBuf *ibuf)
{