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.