Kann diese Funktion ein Rundungs Problem verursachen?
Delphi-Quellcode:
for y := 0 to (imgH - 1) do
begin
for x := 0 to (imgW - 1) do
begin
if pBits.rgbReserved > 0 then
begin
AlphaCoef := (255 shl 8) div pBits.rgbReserved;
pBits.rgbBlue := ((pBits.rgbBlue * AlphaCoef) shr 8);
pBits.rgbGreen := ((pBits.rgbGreen * AlphaCoef) shr 8);
pBits.rgbRed := ((pBits.rgbRed * AlphaCoef) shr 8);
end;
inc(pBits);
end;
end;
wenn ja nehme ich besser
Delphi-Quellcode:
for y := 0 to (imgH - 1) do
begin
for x := 0 to (imgW - 1) do
begin
if pBits.rgbReserved > 0 then
begin
AlphaCoef := (255 shl 16) div pBits.rgbReserved;
pBits.rgbBlue := ((pBits.rgbBlue * AlphaCoef) shr 16);
pBits.rgbGreen := ((pBits.rgbGreen * AlphaCoef) shr 16);
pBits.rgbRed := ((pBits.rgbRed * AlphaCoef) shr 16);
end;
inc(pBits);
end;
end;
Ich möchte nur eine Bestätigung das es so ist... Danke.
vorher hatte ich es so.. was aber bedingt durch single(float) um ein 4faches langsamer ist.
bitmap: 4096x4096
elapsed: 2763 bei Verwendung von single.
elapsed: 627 und ULong.
Delphi-Quellcode:
for IntI := (bm.bmWidth * bm.bmHeight) downto 1 do
begin
if pBits.rgbReserved > 0 then
begin
AlphaCoef := (pBits.rgbReserved / 255);
pBits.rgbBlue := round(pBits.rgbBlue / AlphaCoef);
pBits.rgbGreen := round(pBits.rgbGreen / AlphaCoef);
pBits.rgbRed := round(pBits.rgbRed / AlphaCoef);
end;
Inc(pBits);
end;
gruss