Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#5

Re: BrushCopy - nur schneller (Scanline+Pointer)

  Alt 20. Sep 2009, 18:14
Zitat von LDericher:
Wasn los mit euch?
Liegts am Sonntag? Habt ihr frei?
Was'n mit dir los?
Oder hast die Reglung mit dem Puschen vergessen?



Du weißt aber, daß die [1]+Inc(T) nicht die obere linke Ecke ist?
Dieses ist 1 Pixel rechts über der unteren linken Ecke

Delphi-Quellcode:
var C: LongInt;

T := BMP.ScanLine[1];
Inc(T);
C := PLongInt(T)^ and $00FFFFFF;
for I := BMP.Height - 1 downto 0 do
   begin
   P := BMP.ScanLine[I];
   Q := Aug.ScanLine[I];
   for J := BMP.Width - 1 downto 0 do
      begin
      if PLongInt(P)^ and $00FFFFFF <> C then
          begin
          PWord(Q)^ := PWord(P)^;
          Q.R:=P.R;
          end;
      inc(P);
      inc(Q);
      end;
   end;

// oder

      if PLongInt(P)^ and $00FFFFFF <> C then
          begin
          PLongInt(Q)^ := (PLongInt(Q)^ and $FF000000) or (PLongInt(P)^ and $00FFFFFF);
          end;

// oder var C2: LongInt;

      C2 := PLongInt(P)^ and $00FFFFFF;
      if C2 <> C then
          begin
          PLongInt(Q)^ := (PLongInt(Q)^ and $FF000000) or C2;
          end;

Wer jetzt wegen dem letzen Pixel Angst hat, bezüglich des einen zusätzlich gelesenen Bytes und einem Zugriffsfehler ... keine Angst, im Bitmap ist der Speicher auf ganze Integer-Grenzen reserviert und notfalls wird aufgerundet.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat