ultimatepp/uppdev/Blending/main.cpp
cxl 351994a6cc Adding uppdev....
git-svn-id: svn://ultimatepp.org/upp/trunk@328 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-08-15 08:36:24 +00:00

65 lines
1.7 KiB
C++

#include <CtrlLib/CtrlLib.h>
GUI_APP_MAIN
{
int diver[256];
String s;
for(int a = 1; a <= 255; a++) {
diver[a] = 129 * 255 / a;
DUMP(129 * 255 / a);
s << diver[a] << ", ";
}
DUMP(s);
LOG("------");
int n = 0, cn = 0;
double maxdelta = 0, cmaxdelta = 0;
int out = 0, cout = 0;
int step = 15;
for(int Fa = 0; Fa <= 255; Fa += step)
for(int Ba = 0; Ba <= 255; Ba += step) {
double A = (Fa / 255.0 + Ba / 255.0 - Fa / 255.0 * Ba / 255.0);
//int Da = Fa + Ba - Fa * Ba / (255 * 255);
// int Da = Fa + (((Ba + (Ba >> 7)) * (255 - Fa) + Fa) >> 8);
double dDa = 255 * A;
int Da = minmax((int)(255 * A + 0.5), 0, 255);
double d = abs(dDa - Da);
bool b = Da > 255 || Da < 0;
if(b) out++;
if(d >= 1 || b) {
// LOG("Fa: " << Fa << ", Ba: " << Ba << "| " << dDa << " " << dDA << " delta: " << a - A);
n++;
if(d > maxdelta)
maxdelta = d;
}
// int m = Da ? int(129 * 255 / dDa) : 0;
int m = A > 0.001 ? int(256 * (Fa / 255.0) / A + 0.5) : 0;
DUMP(m);
for(int F = 0; F <= 255; F += step)
for(int B = 0; B <= 255; B += step) {
// int D = B + (m * Fa * (F - B) >> 15);
int D = B + (m * (F - B) >> 8);
double dD = B + Fa / dDa * (F - B);
double d = abs(D - dD);
bool b = D > 255 || d < 0;
if(b) cout++;
if(d > cmaxdelta) {
cmaxdelta = d;
}
if(d >= 1 || b) {
// LOG("[" << Fa << ", " << F <<
// "] over [" << Ba << ", " << B <<
// "]: [" << Da << ", " << D <<
// "] -=- [" << dDa << ", " << dD << ']');
cn++;
}
}
}
DUMP(n);
DUMP(maxdelta);
DUMP(out);
DUMP(cn);
DUMP(cmaxdelta);
DUMP(cout);
}