unsigned char WatermarkGet(unsigned char a, unsigned char b, unsigned char c) { unsigned char code, position; code=(GetLSB(a) * 4) + (GetLSB(b) * 2) + GetLSB(c); switch (code) { case 0: position = 0; break; case 7: position = 0; break; case 1: position = 1; break; case 6: position = 1; break; case 2: position = 2; break; case 5: position = 2; break; case 3: position = 3; break; case 4: position = 3; break; } return position; }
void WatermarkSet(unsigned char &a, unsigned char &b, unsigned char &c, int position) { unsigned char bit1, bit2, bit3, code; code=(GetLSB(a) * 4) + (GetLSB(b) * 2) + GetLSB(c); switch (position) { /* On doit tatouer que le pixel effacé est x0 */ case 0: switch (code) { case 1: c=ResetLSB(c); break; case 2: b=ResetLSB(b); break; case 3: a=SetLSB(a); break; case 4: a=ResetLSB(a); break; case 5: b=SetLSB(b); break; case 6: c=SetLSB(c); break; } break; /* On doit tatouer que le pixel effacé est x1 */ case 1: switch (code) { case 0: c=SetLSB(c); break; case 2: a=SetLSB(a); break; case 3: b=ResetLSB(b); break; case 4: b=SetLSB(b); break; case 5: a=ResetLSB(a); break; case 7: c=ResetLSB(c); break; } break; /* On doit tatouer que le pixel effacé est x2 */ case 2: switch (code) { case 0: b=SetLSB(b); break; case 1: a=SetLSB(a); break; case 3: c=ResetLSB(c); break; case 4: c=SetLSB(c); break; case 6: a=ResetLSB(a); break; case 7: b=ResetLSB(b); break; } break; /* On doit tatouer que le pixel effacé est x3 */ case 3: switch (code) { case 0: a=SetLSB(a); break; case 1: b=SetLSB(b); break; case 2: c=SetLSB(c); break; case 5: c=ResetLSB(c); break; case 6: b=ResetLSB(b); break; case 7: a=ResetLSB(a); break; } break; } return; }
void add(int i, BitT v) { while (i <= n) { f[i] += v; i += GetLSB(i); } }