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:
authorTon Roosendaal <ton@blender.org>2006-02-18 17:35:43 +0300
committerTon Roosendaal <ton@blender.org>2006-02-18 17:35:43 +0300
commit1ea90994744cb95d83717bb7df972c693f9e9583 (patch)
treed803ddef0effd29024cfb71e8d81ee41f6b52a1d /source/blender/imbuf
parent7425a8fcaa3a777155d7b75d368db3b0ed1e58a4 (diff)
- Restored "dither" option for conversion from float -> byte images.
This now is a post-process option only (used to be in render). It is only handled within the Imbuf/ module, on conversions from float to byte rect, which atm mostly happens on saving images. - Small fix: when using Scene RenderLayer nodes, the speed vectors for these nodes were not created when that scene had "Do Composite" off.
Diffstat (limited to 'source/blender/imbuf')
-rw-r--r--source/blender/imbuf/IMB_imbuf_types.h3
-rw-r--r--source/blender/imbuf/intern/divers.c37
2 files changed, 31 insertions, 9 deletions
diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h
index fe82b852eaa..db178841979 100644
--- a/source/blender/imbuf/IMB_imbuf_types.h
+++ b/source/blender/imbuf/IMB_imbuf_types.h
@@ -96,7 +96,8 @@ typedef struct ImBuf{
unsigned int encodedbuffersize; /**< Size of encodedbuffer */
float *rect_float; /**< floating point Rect equivilant */
-
+ float dither; /**< random dither value, for conversion from float -> byte rect */
+
struct MEM_CacheLimiterHandle_s * c_handle; /**< handle for cache limiter */
int refcounter; /**< Refcounter for multiple users */
} ImBuf;
diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c
index 71292e27611..2fc80f6ddcb 100644
--- a/source/blender/imbuf/intern/divers.c
+++ b/source/blender/imbuf/intern/divers.c
@@ -33,6 +33,7 @@
*/
#include "BLI_blenlib.h"
+#include "BLI_rand.h"
#include "imbuf.h"
#include "imbuf_patch.h"
@@ -172,6 +173,7 @@ void IMB_rect_from_float(struct ImBuf *ibuf)
{
/* quick method to convert floatbuf to byte */
float *tof = ibuf->rect_float;
+ float dither= ibuf->dither;
int i;
unsigned char *to = (unsigned char *) ibuf->rect;
@@ -181,14 +183,33 @@ void IMB_rect_from_float(struct ImBuf *ibuf)
to = (unsigned char *) ibuf->rect;
}
- for (i = ibuf->x * ibuf->y; i > 0; i--)
- {
- to[0] = FTOCHAR(tof[0]);
- to[1] = FTOCHAR(tof[1]);
- to[2] = FTOCHAR(tof[2]);
- to[3] = FTOCHAR(tof[3]);
- to += 4;
- tof += 4;
+ if(dither==0.0f) {
+ for (i = ibuf->x * ibuf->y; i > 0; i--) {
+ to[0] = FTOCHAR(tof[0]);
+ to[1] = FTOCHAR(tof[1]);
+ to[2] = FTOCHAR(tof[2]);
+ to[3] = FTOCHAR(tof[3]);
+ to += 4;
+ tof += 4;
+ }
+ }
+ else {
+ float dither_value, col;
+ dither= dither/255.0f;
+ for (i = ibuf->x * ibuf->y; i > 0; i--) {
+ dither_value = (BLI_frand()-0.5)*dither;
+ col= tof[0] + dither_value;
+ to[0] = FTOCHAR(col);
+ col= tof[1] + dither_value;
+ to[1] = FTOCHAR(col);
+ col= tof[2] + dither_value;
+ to[2] = FTOCHAR(col);
+ col= tof[3] + dither_value;
+ to[3] = FTOCHAR(col);
+
+ to += 4;
+ tof += 4;
+ }
}
}