19#ifndef KIS_INTEGER_MATHS_H
20#define KIS_INTEGER_MATHS_H
23#if defined(HAVE_STDINT_H)
27#if !defined(UINT8_MAX)
30#if !defined(UINT8_MIN)
34#if !defined(UINT16_MAX)
35#define UINT16_MAX 65535u
37#if !defined(UINT16_MIN)
41#if !defined(UINT32_MAX)
42#define UINT32_MAX (4294967295u)
44#if !defined(UINT32_MIN)
48#if !defined(INT16_MAX)
49#define INT16_MAX 32767
51#if !defined(INT16_MIN)
52#define INT16_MIN -32768
56inline uint UINT8_SCALEBY(uint a, uint b)
58 uint c = a * b + 0x80u;
62inline uint UINT8_MULT(uint a, uint b)
64 uint c = a * b + 0x80u;
65 return ((c >> 8) + c) >> 8;
68inline uint UINT8_DIVIDE(uint a, uint b)
70 uint c = (a * UINT8_MAX + (b / 2u)) / b;
74inline uint UINT8_BLEND(uint a, uint b, uint alpha)
79 int c = ((int(a) - int(b)) * int(alpha)) >> 8;
84inline uint UINT16_MULT(uint a, uint b)
86 uint c = a * b + 0x8000u;
87 return ((c >> 16) + c) >> 16;
90inline int INT16_MULT( int a, int b)
92 return (a*b) / INT16_MAX;
95inline uint UINT16_DIVIDE(uint a, uint b)
97 uint c = (a * UINT16_MAX + (b / 2u)) / b;
101inline uint UINT16_BLEND(uint a, uint b, uint alpha)
106 int c = ((int(a) - int(b)) * int(alpha)) >> 16;
110inline uint UINT8_TO_UINT16(uint c)
115inline uint UINT16_TO_UINT8(uint c)
119 c = c - (c >> 8) + 128;
123inline int INT16_BLEND( int a, int b, uint alpha)
127 int c = ((int(a) - int(b)) * int(alpha)) >> 16;
|