Direkt einen Fehler seh ich nicht. Aber bei der saumäßigen Code-Einrückung machst du es einem auch ziemlich schwer, da durchzublicken ... Sieht aus wie lieblos und unter hast hingeschmissen ...
Was ich komische finde ist, dass du am Anfang image1 auf image_alt zuweist und dann ständig "image_neu" erstellst, ohne das alte freizugeben und einfach über die Position des alten Image legst (Top, Left), dann weißt du image_neu wieder image_alt zu und überall arbeitest du nur mit image_alt, manchmal greifst du auch noch auf image1.left zu ...
Ich glaube die Ursache für den Fehler ist bei deiner Logik und deren Umsetzung zu suchen, die sich irgendwo miteinander beissen.
Achja, vielleicht hilft das ja weiter:
Delphi-Quellcode:
// Gewöhn dir OOP an!
procedure TMyClass.DrawSomething (Canvas: TCanvas);
begin
Canvas.MoveTo (10, 10);
Canvas.LineTo (100, 10);
// ...
end;
procedure TMyClass.ResetBitmap (Bitmap: TBitmap; Width, Height: Integer);
begin
Bitmap.Assign (
nil);
Bitmap.PixelFormat := pf24bit;
Bitmap.Width := Width;
Bitmap.Height := Height;
end;
procedure TMyClass.Draw (TargetImage: TImage);
var
TempBmp: TBitmap;
begin
TempBmp := TBitmap.Create;
// Wir erstellen die Bitmap nur temporär in dieser Prozedur ...
try
ResetBitmap (Bitmap, 100, 100);
// ... initialisieren
DrawSomething (Bitmap.Canvas);
// ... zeichnen
TargetImage.Picture.Assign (
nil);
// ... altes Bild löschen
TargetImage.Picture.Bitmap.Assign (TempBmp);
// ... neues Bild zuweisen
finally
FreeAndNil (TempBmp);
// ... reservierten Speicher wieder freigeben
end;
end;
procedure TForm1.FormCreate (...);
begin
MyClass := TMyClass.Create;
end;
procedure TForm1.FormDestroy (...);
begin
FreeAndNil (MyClass);
end;
procedure TForm1.Button1Click (Sender: TObject);
begin
MyClass.Draw (Image1);
end;