Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Sprites (https://www.delphipraxis.net/81929-sprites.html)

blablab 5. Dez 2006 13:54


Sprites
 
Hallo!

Ich hab n TImage und würde gerne mit der Maus ein Kreis "aufziehen" wie beim Paint. Das Problem ist nur, dass er den Kreis bei OnMouseMove aktualisieren muss und der Kreis darf nicht permanent auf dem TImage gezeichnet sein, sondern den muss ich ja dann wieder weglöschen.

Weiß jemand, wie man sowas macht?
Ich hatte mir überlegt noch ein zweites TImage auf das andere zu legen und darauf den temporären Kreis zu zeichnen, aber ich denke das ist keine so gute und schnelle lösung...

Vielen Dank schonmal!

Simon

DGL-luke 5. Dez 2006 13:56

Re: Sprites
 
Das kannst du z.B. machen, indem du per XOR zeichnest. das Bild wird dann dort, wo du den Kreis zeichnest, invertiert. beim nächsten MouseMove zeichnest du dann noch einmal per XOR über den alten Kreis drüber - schwupps, weg ist er.

Ansonsten kannst du natürlich auch das Bild einfach komplett neuzeichnen.

Eichhoernchen 5. Dez 2006 13:59

Re: Sprites
 
schnapp dir ne Bitmap Variable, die du vor dem Zeichnen mit dem aktuellen Bild füllst, jetzt bevor du den neuen Kreis zeichnest lädst du deine gespeicherte Bitmap wieder auf das Image und schon ist der alte Kreis weg und der neue ist da.

Ich hoffe, dass du das gemeint hast.

Die Variable muss natürlich global oder Teil deiner Klasse sein, die muss ja über die OnMouseMove Funktion hinaus gültig bleiben!

blablab 5. Dez 2006 14:01

Re: Sprites
 
und wie kann ich die bitmap-variable mit dem alten bild füllen?
Ist das die funktion bitblt (und wenn ja, wie funktioniert das?)?

Eichhoernchen 5. Dez 2006 14:08

Re: Sprites
 
ich glaube du kannst über .Picture die Bitmap des Images anzusprechen.

Also müsste sowas wie:

Delphi-Quellcode:
var bmp: TBitmap;

bmp := TBitmap.create;


//Bitmap in Image laden
Image1.Picture.Bitmap.assign(bmp);

//Image in Bitmap laden
bmp.assign(Image1.Picture.Bitmap);
bin mir gerade nicht sicher ob assign oder einfach ein := besser ist, sprich:

Delphi-Quellcode:
bmp := Image1.Picture.Bitmap;

blablab 5. Dez 2006 14:14

Re: Sprites
 
Ja aber dann muss ich ja immer das ganze bild zwischenspeichern. Und eigentlich würde es ja reichen, wenn ich nur das stück zwischenspeicher, auf dem ich vorhabe zu malen, oder?
Soviel ich weiß könnte ich an der Stelle dann mit draw das stück wieder reinmalen.
Die frage wäre dann wie ich es zwischenspeicher.
Oder ob es noch einen anderen lösungsweg gibt...

Eichhoernchen 5. Dez 2006 15:11

Re: Sprites
 
ist doch nicht schlimm, dass du es ganz neu schreibst, das geht so schnell, das merkst du gar nicht^^

Naja, kannst dir natürlich auch nur das Stück neu zeichnen, ich glaube es gibt sowas wie TGraphics, da kann man so Bildstücke glaub ich drin ablegen!

blablab 5. Dez 2006 16:17

Re: Sprites
 
Es geht ja darum, dass er es in OnMouseMove neu zeichnet und das Bild so groß wie der Bildschirm sein kann. Und es sollte halt trotzdem flüssig laufen.
Ich kann mir net vorstellen, dass das dann noch so flüssig läuft.
Werds mal ausprobieren...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz