1#ifndef _LICE_COMBINE_H_
2#define _LICE_COMBINE_H_
6#pragma warning(disable:4244)
9#define __LICE_BOUND(x,lo,hi) ((x)<(lo)?(lo):((x)>(hi)?(hi):(x)))
12#define LICE_PIXEL_HALF(x) (((x)>>1)&0x7F7F7F7F)
13#define LICE_PIXEL_QUARTER(x) (((x)>>2)&0x3F3F3F3F)
14#define LICE_PIXEL_EIGHTH(x) (((x)>>3)&0x1F1F1F1F)
19 const unsigned int f4=(xfrac*yfrac)>>16;
20 const unsigned int f3=yfrac-f4;
21 const unsigned int f2=xfrac-f4;
22 const unsigned int f1=65536-yfrac-xfrac+f4;
23 #define DOCHAN(output, inchan) \
24 (output)=(pin[(inchan)]*f1 + pin[4+(inchan)]*f2 + pinnext[(inchan)]*f3 + pinnext[4+(inchan)]*f4)>>16;
34 const unsigned int f4=(xfrac*yfrac)>>16;
35 const unsigned int f3=yfrac-f4;
36 const unsigned int f2=xfrac-f4;
37 const unsigned int f1=65536-yfrac-xfrac+f4;
38 #define DOCHAN(inchan) \
39 (out[inchan])=(pin[(inchan)]*f1 + pin[4+(inchan)]*f2 + pinnext[(inchan)]*f3 + pinnext[4+(inchan)]*f4)>>16;
50 const unsigned int f4=(xfrac*yfrac)>>16;
51 const unsigned int f3=yfrac-f4;
52 const unsigned int f2=xfrac-f4;
53 const unsigned int f1=65536-yfrac-xfrac+f4;
63 const unsigned int f=65536-frac;
71 const unsigned int f=65536-frac;
80#define LICE_PIX_MAKECHAN(a,b) out[a] = (b&~0xff) ? (b<0?0:255) : b;
85#undef LICE_PIX_MAKECHAN
90#define LICE_PIX_MAKECHAN(a,b) out[a] = b;
95#undef LICE_PIX_MAKECHAN
100#define HSV_P v*(256-s)/256
101#define HSV_Q(hval) v*(16384-(hval)*s)/16384
102#define HSV_T(hval) v*(16384-(64-(hval))*s)/16384
106#ifdef LICE_COMBINE_IMPLEMENT_HSV
108 #define __LICE_HSV2Pix LICE_HSV2Pix
124#ifdef LICE_COMBINE_IMPLEMENT_HSV
126#define __LICE_HSV2RGB LICE_HSV2RGB
164#define LICE_RGB2HSV_USE_TABLE
167#ifdef LICE_COMBINE_IMPLEMENT_HSV
169 #define __LICE_RGB2HSV LICE_RGB2HSV
225#ifndef LICE_RGB2HSV_USE_TABLE
233#ifdef LICE_RGB2HSV_USE_TABLE
239 *
h = ((
d*64)/df) + degoffs;
240 *
s = (df*256)/(maxrgb+1);
295 *dest = ((*dest>>1) &0x7f7f7f7f) + ((src>>1)&0x7f7f7f7f);
319 *dest = ((*dest>>1) &0x7f7f7f7f) + src;
329 *dest = ((tmp>>1) &0x7f7f7f7f) + ((tmp>>2) &0x3f3f3f3f) + src;
339 *dest = ((tmp>>1) &0x7f7f7f7f) + ((tmp>>3) &0x1f1f1f1f) + src;
348 *dest = ((*dest>>2) &0x3f3f3f3f) + src;
357 const int sc=(256-alpha);
373 const int sc=(256-alpha);
391 const int sc2=(alpha*(
a+1))/256;
392 const int sc = 256 - sc2;
410 const int sc2=(alpha*(
a+1))/256;
411 const int sc = 256 - sc2;
434 const int sc=(255-
a);
458 const int sc=(255-
a);
470#ifndef LICE_DISABLE_BLEND_ADD
494 alpha=(alpha*(
a+1))/256;
505#define _LICE_CombinePixelsAddSourceAlpha _LICE_CombinePixelsCopySourceAlphaClamp
506#define _LICE_CombinePixelsAdd _LICE_CombinePixelsCopyClamp
509#ifndef LICE_DISABLE_BLEND_DODGE
516 const int src_r = 256-
r*alpha/256;
517 const int src_g = 256-
g*alpha/256;
518 const int src_b = 256-
b*alpha/256;
519 const int src_a = 256-
a*alpha/256;
534 const int ualpha=(alpha*(
a+1))/256;
536 const int src_r = 256-
r*ualpha/256;
537 const int src_g = 256-
g*ualpha/256;
538 const int src_b = 256-
b*ualpha/256;
539 const int src_a = 256-
a*ualpha/256;
550#define _LICE_CombinePixelsColorDodgeSourceAlpha _LICE_CombinePixelsCopySourceAlphaClamp
551#define _LICE_CombinePixelsColorDodge _LICE_CombinePixelsCopyClamp
555#ifndef LICE_DISABLE_BLEND_MUL
564 const int da=(256-alpha)*256;
580 const int da=(256-alpha)*256;
596 const int ualpha=(alpha*(
a+1))/256;
597 const int da=(256-ualpha)*256;
614 const int ualpha=(alpha*(
a+1))/256;
615 const int da=(256-ualpha)*256;
627#define _LICE_CombinePixelsMulSourceAlphaNoClamp _LICE_CombinePixelsCopySourceAlphaNoClamp
628#define _LICE_CombinePixelsMulSourceAlphaClamp _LICE_CombinePixelsCopySourceAlphaClamp
629#define _LICE_CombinePixelsMulNoClamp _LICE_CombinePixelsCopyNoClamp
630#define _LICE_CombinePixelsMulClamp _LICE_CombinePixelsCopyClamp
634#ifndef LICE_DISABLE_BLEND_OVERLAY
646 int srcr =
r*alpha, srcg =
g*alpha, srcb =
b*alpha, srca =
a*alpha;
647 int da=(256-alpha)*256;
648 int mr = (destr*(da+srcr))/65536;
649 int mg = (destg*(da+srcg))/65536;
650 int mb = (destb*(da+srcb))/65536;
651 int ma = (desta*(da+srca))/65536;
652 int sr = 256-(65536-srcr)*(256-destr)/65536;
653 int sg = 256-(65536-srcg)*(256-destg)/65536;
654 int sb = 256-(65536-srcb)*(256-destb)/65536;
655 int sa = 256-(65536-srca)*(256-desta)/65536;
657 destr = (destr*sr+(256-destr)*mr)/256;
658 destg = (destg*sg+(256-destg)*mg)/256;
659 destb = (destb*sb+(256-destb)*mb)/256;
660 desta = (desta*sa+(256-desta)*ma)/256;
663 const int da=(256-alpha)*128;
664 const int srcr =
r*alpha+da, srcg =
g*alpha+da, srcb =
b*alpha+da, srca =
a*alpha + da;
665 destr = ( destr*( (destr*(32768-srcr))/256 + srcr ) ) >> 15;
666 destg = ( destg*( (destg*(32768-srcg))/256 + srcg ) ) >> 15;
667 destb = ( destb*( (destb*(32768-srcb))/256 + srcb ) ) >> 15;
668 desta = ( desta*( (desta*(32768-srca))/256 + srca ) ) >> 15;
686#define _LICE_CombinePixelsOverlaySourceAlpha _LICE_CombinePixelsCopySourceAlphaClamp
687#define _LICE_CombinePixelsOverlay _LICE_CombinePixelsCopyClamp
692#ifndef LICE_DISABLE_BLEND_HSVADJ
701 h+=(((
r+
r/2) - 192) * alpha)/256;
703 else if (
h>=384)
h-=384;
704 s+=((
g-128)*alpha)/128;
710 v+=((
b-128)*alpha)/128;
731#define _LICE_CombinePixelsHSVAdjustSourceAlpha _LICE_CombinePixelsCopySourceAlphaClamp
732#define _LICE_CombinePixelsHSVAdjust _LICE_CombinePixelsCopyClamp
747#define __LICE_ACTION_SRCALPHA(mode,ia,clamp) \
748 if ((ia)!=0) switch ((mode)&(LICE_BLIT_MODE_MASK|LICE_BLIT_USE_ALPHA)) { \
749 case LICE_BLIT_MODE_COPY: if ((ia)>0) { \
751 if ((ia)==256) { __LICE__ACTION(_LICE_CombinePixelsClobberClamp); } \
752 else { __LICE__ACTION(_LICE_CombinePixelsCopyClamp); } \
754 if ((ia)==256) { __LICE__ACTION(_LICE_CombinePixelsClobberNoClamp); } \
755 else { __LICE__ACTION(_LICE_CombinePixelsCopyNoClamp); } \
759 case LICE_BLIT_MODE_ADD: __LICE__ACTION(_LICE_CombinePixelsAdd); break; \
760 case LICE_BLIT_MODE_DODGE: __LICE__ACTION(_LICE_CombinePixelsColorDodge); break; \
761 case LICE_BLIT_MODE_MUL: \
762 if (clamp) { __LICE__ACTION(_LICE_CombinePixelsMulClamp); } \
763 else { __LICE__ACTION(_LICE_CombinePixelsMulNoClamp); } \
765 case LICE_BLIT_MODE_OVERLAY: __LICE__ACTION(_LICE_CombinePixelsOverlay); break; \
766 case LICE_BLIT_MODE_HSVADJ: __LICE__ACTION(_LICE_CombinePixelsHSVAdjust); break; \
767 case LICE_BLIT_MODE_COPY|LICE_BLIT_USE_ALPHA: \
769 if ((ia)==256) { __LICE__ACTION(_LICE_CombinePixelsCopySourceAlphaIgnoreAlphaParmClamp);} \
770 else { __LICE__ACTION(_LICE_CombinePixelsCopySourceAlphaClamp); } \
772 if ((ia)==256) { __LICE__ACTION(_LICE_CombinePixelsCopySourceAlphaIgnoreAlphaParmNoClamp); } \
773 else { __LICE__ACTION(_LICE_CombinePixelsCopySourceAlphaNoClamp); } \
776 case LICE_BLIT_MODE_ADD|LICE_BLIT_USE_ALPHA: \
777 __LICE__ACTION(_LICE_CombinePixelsAddSourceAlpha); \
779 case LICE_BLIT_MODE_DODGE|LICE_BLIT_USE_ALPHA: \
780 __LICE__ACTION(_LICE_CombinePixelsColorDodgeSourceAlpha); \
782 case LICE_BLIT_MODE_MUL|LICE_BLIT_USE_ALPHA: \
783 if (clamp) { __LICE__ACTION(_LICE_CombinePixelsMulSourceAlphaClamp); } \
784 else { __LICE__ACTION(_LICE_CombinePixelsMulSourceAlphaNoClamp); } \
786 case LICE_BLIT_MODE_OVERLAY|LICE_BLIT_USE_ALPHA: \
787 __LICE__ACTION(_LICE_CombinePixelsOverlaySourceAlpha); \
789 case LICE_BLIT_MODE_HSVADJ|LICE_BLIT_USE_ALPHA: \
790 __LICE__ACTION(_LICE_CombinePixelsHSVAdjustSourceAlpha); \
796#define __LICE_ACTION_NOSRCALPHA(mode, ia,clamp) \
797 if ((ia)!=0) switch ((mode)&LICE_BLIT_MODE_MASK) { \
798 case LICE_BLIT_MODE_COPY: if ((ia)>0) { if (clamp) { __LICE__ACTION(_LICE_CombinePixelsCopyClamp); } else { __LICE__ACTION(_LICE_CombinePixelsCopyNoClamp); } } break; \
799 case LICE_BLIT_MODE_ADD: __LICE__ACTION(_LICE_CombinePixelsAdd); break; \
800 case LICE_BLIT_MODE_DODGE: __LICE__ACTION(_LICE_CombinePixelsColorDodge); break; \
801 case LICE_BLIT_MODE_MUL: if (clamp) { __LICE__ACTION(_LICE_CombinePixelsMulClamp); } else { __LICE__ACTION(_LICE_CombinePixelsMulNoClamp); } break; \
802 case LICE_BLIT_MODE_OVERLAY: __LICE__ACTION(_LICE_CombinePixelsOverlay); break; \
803 case LICE_BLIT_MODE_HSVADJ: __LICE__ACTION(_LICE_CombinePixelsHSVAdjust); break; \
807#define __LICE_ACTION_CONSTANTALPHA(mode,ia,clamp) \
808 if ((ia)!=0) switch ((mode)&LICE_BLIT_MODE_MASK) { \
809 case LICE_BLIT_MODE_COPY: \
810 if ((ia)==256) { if (clamp) { __LICE__ACTION(_LICE_CombinePixelsClobberClamp); } else { __LICE__ACTION(_LICE_CombinePixelsClobberNoClamp); } } \
811 else if ((ia)==128) { if (clamp) { __LICE__ACTION(_LICE_CombinePixelsHalfMixClamp); } else { __LICE__ACTION(_LICE_CombinePixelsHalfMixNoClamp); } } \
812 else if ((ia)>0) { if (clamp) { __LICE__ACTION(_LICE_CombinePixelsCopyClamp); } else { __LICE__ACTION(_LICE_CombinePixelsCopyNoClamp); } } \
814 case LICE_BLIT_MODE_ADD: __LICE__ACTION(_LICE_CombinePixelsAdd); break; \
815 case LICE_BLIT_MODE_DODGE: __LICE__ACTION(_LICE_CombinePixelsColorDodge); break; \
816 case LICE_BLIT_MODE_MUL: if (clamp) { __LICE__ACTION(_LICE_CombinePixelsMulClamp); } else { __LICE__ACTION(_LICE_CombinePixelsMulNoClamp); } break; \
817 case LICE_BLIT_MODE_OVERLAY: __LICE__ACTION(_LICE_CombinePixelsOverlay); break; \
818 case LICE_BLIT_MODE_HSVADJ: __LICE__ACTION(_LICE_CombinePixelsHSVAdjust); break; \
823#define __LICE_SC(x) do { (x) = ((x)*(__sc))/256; } while (0)
824#define __LICE_SCU(x) do { (x) = ((x)*(__sc))>>8; } while (0)
uint8_t a
Definition Spc_Cpu.h:141
Definition lice_combine.h:473
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:475
Definition lice_combine.h:488
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:490
Definition lice_combine.h:260
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:262
Definition lice_combine.h:269
static void doPixFAST(LICE_pixel *dest, LICE_pixel src)
Definition lice_combine.h:271
Definition lice_combine.h:251
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:253
Definition lice_combine.h:512
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:514
Definition lice_combine.h:530
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:532
Definition lice_combine.h:369
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:371
Definition lice_combine.h:353
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:355
Definition lice_combine.h:404
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:406
Definition lice_combine.h:446
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:448
Definition lice_combine.h:422
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:424
Definition lice_combine.h:385
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:387
Definition lice_combine.h:695
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:697
Definition lice_combine.h:722
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:724
Definition lice_combine.h:315
static void doPixFAST(LICE_pixel *dest, LICE_pixel src)
Definition lice_combine.h:317
Definition lice_combine.h:300
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:302
Definition lice_combine.h:291
static void doPixFAST(LICE_pixel *dest, LICE_pixel src)
Definition lice_combine.h:293
Definition lice_combine.h:278
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:280
Definition lice_combine.h:574
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:576
Definition lice_combine.h:558
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:560
Definition lice_combine.h:608
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:610
Definition lice_combine.h:590
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:592
Definition lice_combine.h:637
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:639
Definition lice_combine.h:677
static void doPix(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:679
Definition lice_combine.h:324
static void doPixFAST(LICE_pixel *dest, LICE_pixel src)
Definition lice_combine.h:326
Definition lice_combine.h:334
static void doPixFAST(LICE_pixel *dest, LICE_pixel src)
Definition lice_combine.h:336
Definition lice_combine.h:344
static void doPixFAST(LICE_pixel *dest, LICE_pixel src)
Definition lice_combine.h:346
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned d
Definition inflate.c:940
int g
Definition inflate.c:1573
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
unsigned short _LICE_RGB2HSV_invtab[256]
Definition lice.cpp:3022
#define LICE_PIXEL_B
Definition lice.h:69
void LICE_HSV2RGB(int h, int s, int v, int *r, int *g, int *b)
#define LICE_RGBA(r, g, b, a)
Definition lice.h:57
LICE_pixel LICE_HSV2Pix(int h, int s, int v, int alpha)
#define LICE_PIXEL_A
Definition lice.h:72
#define LICE_PIXEL_R
Definition lice.h:71
unsigned char LICE_pixel_chan
Definition lice.h:55
unsigned int LICE_pixel
Definition lice.h:54
void LICE_RGB2HSV(int r, int g, int b, int *h, int *s, int *v)
#define lice_min(x, y)
Definition lice.h:335
#define LICE_PIXEL_G
Definition lice.h:70
static void __LICE_LinearFilterI(int *r, int *g, int *b, int *a, const LICE_pixel_chan *pin, const LICE_pixel_chan *pinnext, unsigned int frac)
Definition lice_combine.h:61
#define LICE_PIX_MAKECHAN(a, b)
#define DOCHAN(output, inchan)
static void __LICE_LinearFilterIPixOut(LICE_pixel_chan *out, const LICE_pixel_chan *pin, const LICE_pixel_chan *pinnext, unsigned int frac)
Definition lice_combine.h:69
#define HSV_Q(hval)
Definition lice_combine.h:101
static void _LICE_MakePixelClamp(LICE_pixel_chan *out, int r, int g, int b, int a)
Definition lice_combine.h:78
static void _LICE_MakePixelNoClamp(LICE_pixel_chan *out, LICE_pixel_chan r, LICE_pixel_chan g, LICE_pixel_chan b, LICE_pixel_chan a)
Definition lice_combine.h:88
#define HSV_X
Definition lice_combine.h:103
#define HSV_P
Definition lice_combine.h:100
static void __LICE_BilinearFilterIPixOut(LICE_pixel_chan *out, const LICE_pixel_chan *pin, const LICE_pixel_chan *pinnext, unsigned int xfrac, unsigned int yfrac)
Definition lice_combine.h:32
void(* LICE_COMBINEFUNC)(LICE_pixel_chan *dest, int r, int g, int b, int a, int alpha)
Definition lice_combine.h:821
static void __LICE_RGB2HSV(int r, int g, int b, int *h, int *s, int *v)
Definition lice_combine.h:171
#define HSV_T(hval)
Definition lice_combine.h:102
static LICE_pixel __LICE_HSV2Pix(int h, int s, int v, int alpha)
Definition lice_combine.h:110
static void __LICE_HSV2RGB(int h, int s, int v, int *r, int *g, int *b)
Definition lice_combine.h:128
static void __LICE_BilinearFilterI(int *r, int *g, int *b, int *a, const LICE_pixel_chan *pin, const LICE_pixel_chan *pinnext, unsigned int xfrac, unsigned int yfrac)
Definition lice_combine.h:17
static void __LICE_BilinearFilterI_2(int *r, int *g, int *b, int *a, const LICE_pixel_chan *pin, const LICE_pixel_chan *pinnext, int npoffs, unsigned int xfrac, unsigned int yfrac)
Definition lice_combine.h:48
float out
Definition lilv_test.c:1461
int r
Definition crypt.c:458
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
typedef int(UZ_EXP MsgFn)()
#define void
Definition unzip.h:396