Thema: Delphi Rundungs problem?

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Rundungs problem?

  Alt 1. Jun 2017, 18:18
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

Geändert von EWeiss ( 1. Jun 2017 um 18:35 Uhr)
  Mit Zitat antworten Zitat