![]() |
Re: Bitmap als Zeiger - Ich versteh es nicht !
Kleines Beispiel:
Delphi-Quellcode:
Ich hoffe, ich konnte dir helfen ;)
function MyFunc (AValue: String): TBitmap;
var MyVar: Boolean; begin //Etwas machen Result := TBitmap.Create; Result.Machwas; end; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- var TempBmp, Bmp1, Bmp2, Bmp3, Bmp4: TBitmap; begin Bmp1:= TBitmap.Create; Bmp2:= TBitmap.Create; Bmp1.LoadFromFile('C:\bild1.bmp'); Bmp2.LoadFromFile('C:\bild2.bmp'); TempBmp := MyFunc ('Ein Bitmap bitte'); Bmp3 := TempBmp; // Addresse zugewiesen - Bmp3 und TempBmp zeigen auf dasselbe Bitmap Bmp4 := TBitmap.Create; Bmp4.Assign (TempBmp); // Bitmap Kopiert // Hier zeigen TempBmp und Bmp3 auf das zurückgegebene Bitmap und Bmp4 zeigt auf eine Kopie dessen. TempBmp := MyFunc ('Ein anderes Bitmap bitte'); // Kein Leak, wel Addresse noch in Bmp3 // Bmp3 := nil; // Leak FreeAndNil (Bmp3); |
Re: Bitmap als Zeiger - Ich versteh es nicht !
Hallo,
Zitat:
Gruß xaromz |
Re: Bitmap als Zeiger - Ich versteh es nicht !
:oops: Das sollte nicht passieren ...
|
Re: Bitmap als Zeiger - Ich versteh es nicht !
@meisteralex:
Es ist schon richtig gesagt worden: es ist nicht sehr elegant eine Instanz als Rückgabewert einer Funktion zu verwenden. Erstell doch einfach außerhalb der Funktion/Prozedur alle notwendigen Bitmaps, dann übergib' sie der Funktion/Prozedur als Zeiger.
Delphi-Quellcode:
So sollte es ohne Probleme funktionieren.
procedure BmpEncode(Bitmap1,Bitmap2,Bitmap3:TBitmap);
begin // macht was mit Bitmap1 und Bitmap2 und legt das Ergebnis in Bitmap3 end; Eleganter finde ich diese Prozedur, wenn man ScanLine nicht braucht und stattdessen mit den relativ schnellen API-Funktionen arbeitet:
Delphi-Quellcode:
Sinnvoll bei sprachübergreifender Programmierung.
procedure EncodeDCs(SrcDc1,SrcDC2,DestDC:HDC);
begin // macht was mit SrcDC1 und SrcDC2 und legt das Ergebnis in DestDC end; // Aufruf: EncodeDCs(Bitmap1.Canvas.Handle,Bitmap2.Canvas.Handle,Bitmap3.Canvas.Handle); |
Re: Bitmap als Zeiger - Ich versteh es nicht !
jo hab das prinzip jetzt verstanden -> dank euch, also vielen dank
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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-2025 by Thomas Breitkreuz