Du arbeitest ja nur mit einem einzigen Bitmap - dem in Image1. Dass du die Änderungen in Image1 nicht siehst liegt daran, dass Windows es nicht für nötig hält, das Bild neu zu zeichnen. Wenn du die Form minimierst und wiederherstellst, siehst du die Änderungen auch im linken Bild. Oder füge ein Image1.Refresh in den Code ein.
Wenn du das alte Bild behalten willst, musst du mit zwei Bitmaps arbeiten, z.B. so
Delphi-Quellcode:
procedure hochneu(Source, Dest: TBitmap);
var
i,j : Integer;
Row : ^TRGBTriple;
grau : byte;
begin
Dest.Assign(Source);
for j := 0 to Dest.Height-1 do begin
row := Dest.Scanline[j];
for i := 0 to Dest.Width-1 do begin
row^.rgbtred := ( row^.rgbtred + 1 ) mod 256 ;
inc(row)
end
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hochneu(image1.Picture.Bitmap, image2.Picture.Bitmap);
end;
Oder du arbeitest direkt auf Quell- und Ziel-Bitmap mit Scanline - hier würde z.B. das Quellbild ins Zielbild hineingemischt
Delphi-Quellcode:
procedure Blend(Source, Dest: TBitmap);
var
i,j : Integer;
RowS, RowD : ^TRGBTriple;
grau : byte;
begin
for j := 0 to Dest.Height-1 do begin
rowS := Source.Scanline[j]; // Größenüberprüfung spare ich mir hier mal
rowD := Dest.Scanline[j];
for i := 0 to Dest.Width-1 do begin
rowD^.rgbtred := (rowD^.rgbtred + rowS^.rgbtred) Div 2;
rowD^.rgbtBlue := (rowD^.rgbtBlue + rowS^.rgbtBlue) Div 2;
rowD^.rgbtGreen := (rowD^.rgbtGreen + rowS^.rgbtGreen) Div 2;
inc(rowD);
inc(rowS);
end
end;
end;
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.