AlphaCoef ist ein gerundetes Zwischenergebnis.
Bei 16 ist das natürlich größer und somit die Rundung geringer.
Aber die Rundung ist dennoch bei 8 und 16 drin, nur eben nicht gleich groß.
Ich habe da ein Beispiel in C von einem Forum wo ich gerade arbeite. (englisch nicht so mein Ding)
Da wird mir gesagt! Das rundungs Probleme auftreten auf der Basis dieser Berechnung.
Zitat:
it will be on some values...
for example alpha=250, color=251... then instead of 0 you will get 255,
same with 251:252, 252:253, 253:254, 254:255, ...
if use shift by 16, then there is no this problem
Shift 16 soll das Problem beheben mag ja in C++ zutreffend sein aber unter Delphi ?
Auf Grund dieser Berechnung.
Code:
int err = 0;
for (ULONG a = 0; a < 256; a++)
{
float rAlphaCoef = (float)((float)a / 255.0f);
ULONG uAlphaCoef = a ? ((255 << 8) / a) : 0;
for (ULONG c = 0; c < 256; c++)
{
BYTE n = (BYTE)(int)((float)c / rAlphaCoef);
BYTE m = (BYTE)(((ULONG)c * uAlphaCoef) >> 8);
if (n != m && abs(n - m) > 1)
wprintf(L"error: a: %03d; c: %03d [n: %05d, m: %05d] %i\n", a, c, n, m, ++err);
}
}
Ich bin da jetzt etwas unsicher da ich ihm gesagt habe das ich mit Shift 8 eigentlich keine Sichtbaren unterschiede sehe da mein Icon die Transparenz hat die es haben soll.
Deshalb der Post.
gruss