Forum: Programmieren allgemein
Delphi
by himitsu,
1. Jun 2017
Och, so viel ist das auch nicht, da kann man docg problemlos alle Varianten vorberechnen und dann nur noch aus der Liste picken.
type
PColorArray = ^TColorArray;
TColorArray = array of Integer;
TAlphaArray = array of TColorArray;
var
AlphaArray: TAlphaArray;
ColorArray: PColorArray;
for IntI := (bm.bmWidth * bm.bmHeight) - 1 downto 0 do begin
Forum: Programmieren allgemein
Delphi
by himitsu,
1. Jun 2017
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ß.
pBits.rgbBlue := (pBits.rgbBlue * 255) div pBits.rgbReserved; = pBits.rgbBlue := MulDiv(pBits.rgbBlue, 255, pBits.rgbReserved);
aber da deine Werte so klein sind, dass es keinen Überlauf gibt, wäre MulDiv...
Forum: Programmieren allgemein
Delphi
by himitsu,
1. Jun 2017
je mehr, um so größer rgbReserved ist, bei beiden Versionen, aber kleiner, bei großem Multiplikator, also ja ... die 2.
Aber warum das "gerundete" Zwischenergebnis und nicht gleich direkt gerechnet?
pBits.rgbBlue := (pBits.rgbBlue * 255) div pBits.rgbReserved;
Wenn es schnell sein soll dan kann man die 3 Werte auch zusammen in einem MMX-Register verrechnen lassen.
Und pssst
for...