![]() |
Bild verschieben - Komponente belassen
Wie ist es möglich, die Position einer Bitmap auf einem Image zu verändern, ohne aber die Komponente selbst zu verschieben?
|
Re: Bild verschieben - Komponente belassen
Ja, natürlich ist das möglich.
Nur nicht so auf die Schnelle. ;) Den Bildteil den du verschieben willst musst du in ein temp. Bitmap kopieren. Dann kannst du diesen an einer Pos. deiner Wahl auf das Hauptbitmap kopieren. |
Re: Bild verschieben - Komponente belassen
Das wäre dann wohl folgendes:
Delphi-Quellcode:
Aber wie erlange ich Zugriff auf die Position?
procedure TForm1.verschieben;
var BildTemp: TBitmap; begin i:=i+1; BildTemp:=image1.Picture.Bitmap; //image1.Picture.Bitmap wird gelöscht //BildTemp wird auf Position (i,0) gesetzt end; |
Re: Bild verschieben - Komponente belassen
Einfach neu reinzeichnen:
Delphi-Quellcode:
Gruß, Hanno
Image1.CopyRect(Rect(x,y,x+BildTemp.Width,y+BildTemp.Heigth),BildTemp.Canvas,BildTemp.Canvas.ClipRect);
|
Re: Bild verschieben - Komponente belassen
Zitat:
Also so:
Delphi-Quellcode:
BildTemp := TBitmap.Create; // ein neues leeres Bitmap (Object) erzeugen
![]() |
Re: Bild verschieben - Komponente belassen
Zusammenfassend sieht das dann so aus:
Delphi-Quellcode:
Beim Aufruf dieser Prozedur passiert rein gar nichts.
procedure TForm1.verschieben;
var BildTemp: TBitmap; begin BildTemp:=Tbitmap.Create; BildTemp:=image1.Picture.Bitmap; //image1.Picture.Bitmap wird gelöscht image1.Picture.Bitmap.Canvas.CopyRect(rect(100,100,Bildtemp.Width+100,BildTemp.Height+100),BildTemp.Canvas,BildTemp.Canvas.ClipRect); end; Aber eigentlich müsste es doch funktionieren oder? |
Re: Bild verschieben - Komponente belassen
Du hast Width und Heigth vom Bitmap BildTemp noch nicht eingestellt.
Willst du das gesamte Image verschieben, oder nur ein Teil davon? |
Re: Bild verschieben - Komponente belassen
ein ganz böser Fehler bzw. speicherleck
Delphi-Quellcode:
wenn dann so
//ein TBitmap wird erstellt und BildTemp zeigt auf diesen Speicher
BildTemp:=Tbitmap.Create; //BildTemp zeigt danach auf die Stelle Image1.Picture.Bitmap und nicht mehr auf die Stelle wo das neu erstellte Bitmap ist BildTemp:=image1.Picture.Bitmap;
Delphi-Quellcode:
BildTemp:=Tbitmap.Create;
BildTemp.Assign(image1.Picture.Bitmap); |
Re: Bild verschieben - Komponente belassen
Wenn nur ein Teil verschoben werden soll:
Delphi-Quellcode:
ansonsten:
procedure TForm1.Verschieben;
var BildTemp: TBitmap; begin BildTemp:=TBitmap.Create; BildTemp.Width:=DieBitmapBreite; BildTemp.Heigth:=DieBitmapHoehe; //Bitmap wird aus Image1.Canvas aus der Position (i,0) in BildTemp hineinkopiert BildTemp.CopyRect(Rect(0,0,BildTemp.Width,BildTemp.Heigth),Image1.Canvas,Rect(i,0,i+BildTemp.Width,BildTemp.Heigth)); //Image1.Canvas wird mit einem Rectangle übermalt Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,Image1.Heigth+1); inc(i); //BildTemp wird auf Position (i,0) gesetzt Image1.CopyRect(Rect(i,0,i+BildTemp.Width,BildTemp.Heigth),BildTemp.Canvas,BildTemp.Canvas.ClipRect); end;
Delphi-Quellcode:
procedure TForm1.Verschieben;
var BildTemp: TBitmap; begin BildTemp:=TBitmap.Create; //Image1 wird in Bitmap kopiert BildTemp.Assign(Image1.Picture.Bitmap); //Image1.Canvas wird mit einem Rectangle übermalt Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,Image1.Heigth+1); inc(i); //BildTemp wird auf Position (i,0) gesetzt Image1.CopyRect(Rect(i,0,i+BildTemp.Width,BildTemp.Heigth),BildTemp.Canvas,BildTemp.Canvas.ClipRect); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz