Fix for OpenEXR half float save function resulting in dark images saved

Float buffers of ImBuf are always supposed to be linear space a,d ImBuf's
profile means how byte array was constructed from float buffer.
This commit is contained in:
Sergey Sharybin
2012-03-05 18:54:57 +00:00
parent a5eadf14e0
commit 1ae27144f6

View File

@@ -234,34 +234,17 @@ static int imb_save_openexr_half(struct ImBuf *ibuf, const char *name, int flags
if(ibuf->rect_float) {
float *from;
if(ibuf->profile == IB_PROFILE_LINEAR_RGB) {
for (int i = ibuf->y-1; i >= 0; i--)
{
from= ibuf->rect_float + channels*i*width;
for (int i = ibuf->y-1; i >= 0; i--)
{
from= ibuf->rect_float + channels*i*width;
for (int j = ibuf->x; j > 0; j--)
{
to->r = from[0];
to->g = from[1];
to->b = from[2];
to->a = (channels >= 4)? from[3]: 1.0f;
to++; from += 4;
}
}
}
else {
for (int i = ibuf->y-1; i >= 0; i--)
for (int j = ibuf->x; j > 0; j--)
{
from= ibuf->rect_float + channels*i*width;
for (int j = ibuf->x; j > 0; j--)
{
to->r = srgb_to_linearrgb(from[0]);
to->g = srgb_to_linearrgb(from[1]);
to->b = srgb_to_linearrgb(from[2]);
to->a = (channels >= 4)? from[3]: 1.0f;
to++; from += 4;
}
to->r = from[0];
to->g = from[1];
to->b = from[2];
to->a = (channels >= 4)? from[3]: 1.0f;
to++; from += 4;
}
}
}