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:
Diffstat (limited to 'source/blender/imbuf/intern/divers.c')
-rw-r--r--source/blender/imbuf/intern/divers.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c
index 2fc80f6ddcb..c0018d0b336 100644
--- a/source/blender/imbuf/intern/divers.c
+++ b/source/blender/imbuf/intern/divers.c
@@ -141,25 +141,32 @@ void IMB_interlace(struct ImBuf *ibuf)
void IMB_gamwarp(struct ImBuf *ibuf, double gamma)
{
uchar gam[256];
- int i, do_float=0;
- uchar *rect = (uchar *) ibuf->rect;
- float *rectf = ibuf->rect_float;
+ int i;
+ uchar *rect;
+ float *rectf;
if (ibuf == 0) return;
- if (ibuf->rect == 0) return;
- if (ibuf->rect != NULL) do_float = 1;
if (gamma == 1.0) return;
+ rect = (uchar *) ibuf->rect;
+ rectf = ibuf->rect_float;
+
gamma = 1.0 / gamma;
- for (i = 255 ; i >= 0 ; i--) gam[i] = (255.0 * pow(i / 255.0 ,
- gamma)) + 0.5;
- rect = (uchar *) ibuf->rect;
- for (i = ibuf->x * ibuf->y ; i>0 ; i--, rect+=4){
- rect[0] = gam[rect[0]];
- rect[1] = gam[rect[1]];
- rect[2] = gam[rect[2]];
- if (do_float) {
+ if (rect) {
+ for (i = 255 ; i >= 0 ; i--)
+ gam[i] = (255.0 * pow(i / 255.0 ,
+ gamma)) + 0.5;
+
+ for (i = ibuf->x * ibuf->y ; i>0 ; i--, rect+=4){
+ rect[0] = gam[rect[0]];
+ rect[1] = gam[rect[1]];
+ rect[2] = gam[rect[2]];
+ }
+ }
+
+ if (rectf) {
+ for (i = ibuf->x * ibuf->y ; i>0 ; i--, rectf+=4){
rectf[0] = pow(rectf[0] / 255.0, gamma);
rectf[1] = pow(rectf[1] / 255.0, gamma);
rectf[2] = pow(rectf[2] / 255.0, gamma);