Lock/Unlock brauchst vor allem bei Multithread, damit nicht zwei Zeichenoperationen gleichzeitig auf dem Bitmap arbeiten.
Delphi-Quellcode:
R := Rect(0, 0, Bitmap1.Width,Bitmap1.Height); // deine Rects sind ja gleich, da brauchst dann nur Eins
//Bitmap2.PixelFormat := Bitmap1.PixelFormat;
Bitmap2.SetSize(Bitmap1.Width, Bitmap1.Height);
Bitmap2.Canvas.CopyRect(R, Bitmap1.Canvas, R);
// bzw.
//Bitmap2.PixelFormat := Bitmap1.PixelFormat;
Bitmap2.SetSize(Bitmap1.Width, Bitmap1.Height);
Bitmap2.Canvas.Draw(0, 0, Bitmap1);
@dummzeuch: Hmmm, hab hier grad eben nur 'nen XE am Laufen, (glaub aber kaum, dass am TBitmap in den letzten Jahrzehnten viel geändert wurde)
aber
procedure TBitmap.Assign(Source: TPersistent);
kopiert da nirgendwo irgendwas
und selbst das
TBitmap(Source).FImage.Reference;
darin macht am Ende nichts.
Delphi-Quellcode:
procedure TSharedImage.Reference;
begin
Inc(FRefCount);
end;
Aber vielleicht wird erst beim Zugriff auf die Pixels die Referenz dann aufgelöst, damit es dort dann keine weitere Referenz auf den Bildspeicher gibt.