[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51340] trunk/blender/source/blender/imbuf /intern/colormanagement.c: Fix #32858: Image appears too dark in Image Editor
Sergey Sharybin
sergey.vfx at gmail.com
Mon Oct 15 13:16:56 CEST 2012
Revision: 51340
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51340
Author: nazgul
Date: 2012-10-15 11:16:54 +0000 (Mon, 15 Oct 2012)
Log Message:
-----------
Fix #32858: Image appears too dark in Image Editor
No need to linearize byte buffer when converting to display space which is data space.
Modified Paths:
--------------
trunk/blender/source/blender/imbuf/intern/colormanagement.c
Modified: trunk/blender/source/blender/imbuf/intern/colormanagement.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/colormanagement.c 2012-10-15 10:43:10 UTC (rev 51339)
+++ trunk/blender/source/blender/imbuf/intern/colormanagement.c 2012-10-15 11:16:54 UTC (rev 51340)
@@ -99,6 +99,7 @@
typedef struct ColormanageProcessor {
OCIO_ConstProcessorRcPtr *processor;
CurveMapping *curve_mapping;
+ int is_data_result;
} ColormanageProcessor;
/*********************** Color managed cache *************************/
@@ -1207,6 +1208,7 @@
int predivide = handle->predivide;
int is_data = handle->is_data;
+ int is_data_display = handle->cm_processor->is_data_result;
linear_buffer = MEM_callocN(buffer_size * sizeof(float), "color conversion linear buffer");
@@ -1228,7 +1230,7 @@
*fp = (float)(*cp) / 255.0f;
}
- if (!is_data) {
+ if (!is_data && !is_data_display) {
/* convert float buffer to scene linear space */
IMB_colormanagement_transform(linear_buffer, width, height, channels,
from_colorspace, to_colorspace, predivide);
@@ -2347,7 +2349,6 @@
}
else if (byte_buffer) {
rgba_uchar_to_float(pixel, byte_buffer + linear_index);
-
IMB_colormanagement_colorspace_to_scene_linear_v3(pixel, rect_colorspace);
}
@@ -2449,28 +2450,29 @@
const ColorManagedDisplaySettings *display_settings)
{
ColormanageProcessor *cm_processor;
+ ColorManagedViewSettings default_view_settings;
+ const ColorManagedViewSettings *applied_view_settings;
+ ColorSpace *display_space;
cm_processor = MEM_callocN(sizeof(ColormanageProcessor), "colormanagement processor");
- {
- ColorManagedViewSettings default_view_settings;
- const ColorManagedViewSettings *applied_view_settings;
+ if (view_settings) {
+ applied_view_settings = view_settings;
+ }
+ else {
+ init_default_view_settings(display_settings, &default_view_settings);
+ applied_view_settings = &default_view_settings;
+ }
- if (view_settings) {
- applied_view_settings = view_settings;
- }
- else {
- init_default_view_settings(display_settings, &default_view_settings);
- applied_view_settings = &default_view_settings;
- }
+ display_space = display_transform_get_colorspace(applied_view_settings, display_settings);
+ cm_processor->is_data_result = display_space->is_data;
- cm_processor->processor = create_display_buffer_processor(applied_view_settings->view_transform, display_settings->display_device,
- applied_view_settings->exposure, applied_view_settings->gamma);
+ cm_processor->processor = create_display_buffer_processor(applied_view_settings->view_transform, display_settings->display_device,
+ applied_view_settings->exposure, applied_view_settings->gamma);
- if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES) {
- cm_processor->curve_mapping = curvemapping_copy(applied_view_settings->curve_mapping);
- curvemapping_premultiply(cm_processor->curve_mapping, FALSE);
- }
+ if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES) {
+ cm_processor->curve_mapping = curvemapping_copy(applied_view_settings->curve_mapping);
+ curvemapping_premultiply(cm_processor->curve_mapping, FALSE);
}
return cm_processor;
@@ -2479,9 +2481,13 @@
ColormanageProcessor *IMB_colormanagement_colorspace_processor_new(const char *from_colorspace, const char *to_colorspace)
{
ColormanageProcessor *cm_processor;
+ ColorSpace *color_space;
cm_processor = MEM_callocN(sizeof(ColormanageProcessor), "colormanagement processor");
+ color_space = colormanage_colorspace_get_named(to_colorspace);
+ cm_processor->is_data_result = color_space->is_data;
+
cm_processor->processor = create_colorspace_transform_processor(from_colorspace, to_colorspace);
return cm_processor;
More information about the Bf-blender-cvs
mailing list