Hallo Thomas
geht beides - du müsstest in deinem Code dann halt noch faktor als UInt64 definieren und das kostet ein wenig und shift kannst du nicht als const definieren (shift ist bereits ein Rückgabewert). Wenn man diese Dinge berücksichtigt, dann läuft dein Code in 4.74ms und der vorgeschlagene in 3.42ms pro Million Aufrufe durch. Da man bei Farbmatrizen den Aufruf meistens nur maximal 3 Mal pro Bitmap benötigt ist es egal. Wenn man die Prozedur häufiger aufruft spielt es eine Rolle.
Auch 3.4x ms schnell und etwas schöner ist
Delphi-Quellcode:
procedure intRGB(
const dr, dg,
db : double;
var ir, ig,
ib, shift : UInt64 );
const
hshift = 54;
faktor = UInt64(1)
shl hshift;
begin
shift := hshift;
ir := Round(dr * faktor);
ig := Round(dg * faktor);
ib := Round(
db * faktor);
end;