AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap zurück geben und freigeben
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap zurück geben und freigeben

Ein Thema von Desmulator · begonnen am 3. Jan 2008 · letzter Beitrag vom 4. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#1

Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 14:21
Also es geht um folgenden Code:

Delphi-Quellcode:
   Image := TBitmap.Create;



   ...

    //Zurückgeben
    Result := Image;

  finally
    //Image frei geben
    Image.FreeImage;
    Image.Free;
  end;
Das Problem ist , dass ich als rückgabe eine leere Bitmap erhalte, und wenn ich Image im finally block nicht frei gebe klappt alles, bis auf das ich nach ner zeit keinen speicher mehr habe...

Was soll/muss ich anders machne?

MfG
Lars
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 14:25
Übergib das Image doch als Parameter.
Delphi-Quellcode:
procedure TuWas(const Image: TBitmap);
begin
  //hier Dein Code
end;

procedure TFromBla.Blubb;
var Image: TBitmap;
begin
  Image := TBitmap.Create;
  try
    Image.Width := 100;
    Image.Height := 100;
    TuWas(Image);
  finally
    Image.Free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#3

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 14:34
ich würde es aber gerne so nutzen

GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,StaticObject.Appear());
TStaticObject.Appear() gibt eine Bitmap zurück die ich auf GameScreen zeichen will...

ich müsste es nun alles umständlich mit einer weiteren tempbmp lösen

Delphi-Quellcode:
TStaticObject.Appear(TempBmp);
GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,TempBmp); //Das finde ich is doof
Lars
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 14:39
Lies Dir mal diesen Thread durch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 14:40
Zitat von Desmulator:
ich würde es aber gerne so nutzen

GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,StaticObject.Appear()); TStaticObject.Appear() gibt eine Bitmap zurück die ich auf GameScreen zeichen will...
Dann musst du mit dem Speicherleck leben. Grundsätzlich gibt man Objekte auf der Ebene frei, wo sie angelegt wurden. Da du das Objekt aber zurück geben willst, kannst du das nicht machen. Also entweder zusätzliche Bitmap oder Speicherleck.

Anderer Vorschlag: Warum nicht so?

  StaticObject.DrawAppear(GameScreen.Canvas); Schliesslich hat StaticObject PosX, PosY und das Bitmap...

Nachtrag zu deiner Lösung: (freigeben fehlte, try/finally nur Sicherheit)

Delphi-Quellcode:
TStaticObject.Appear(TempBmp);
try
  GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,TempBmp); //Das finde ich is doof
finally
  TempBmp.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#6

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 14:48
Zitat von Muetze1:

  StaticObject.DrawAppear(GameScreen.Canvas); Schliesslich hat StaticObject PosX, PosY und das Bitmap...
Naja ich möchte die Objecte auf den GameScreen zeichnen und nicht das sich die Objecte auf den GameScreen Zeichnen^^

also ich mach es dann gezwungener masen mit einem tmp bmp...

thx
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#7

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 15:17
Delphi-Quellcode:
  //Wir zeichenen das statische Onject auf seine Position
  TempBmp := TBitmap.Create;
  StaticObject.Appear(TempBmp);
  try
    GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,TempBmp);
  finally
    TempBmp.Free;
  end;
Ich erhalte eine zugriffsverletzung und zwar beim zeichen auf den GameScreen ( Paintbox )

wieso das jetzz?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 15:59
Hmm... kann sein, dass ich jetzt Stuss schreibe, aber könnte es so gehen?
Delphi-Quellcode:
  TempBmp := StaticObject.Appear;
  try
    GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,TempBmp);
  finally
    TempBmp.Free;
  end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 19:18
Zitat von Desmulator:
Delphi-Quellcode:
  //Wir zeichenen das statische Onject auf seine Position
  TempBmp := TBitmap.Create;
  StaticObject.Appear(TempBmp);
  try
    GameScreen.Canvas.Draw(StaticObject.PosX,StaticObject.PosY,TempBmp);
  finally
    TempBmp.Free;
  end;
Ich erhalte eine zugriffsverletzung und zwar beim zeichen auf den GameScreen ( Paintbox )

wieso das jetzz?
Was machst du denn nun in der Appear() Methode? Und warum steht der Aufruf der selben ausserhalb des try/finally Abschnittes?
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#10

Re: Bitmap zurück geben und freigeben

  Alt 3. Jan 2008, 20:33
Code von Appear
Delphi-Quellcode:
function TStaticObject.Appear( var Dest: TBitmap ) : TBitMap;
var
  Image : TBitmap;
begin
  try
    //Image erstellen
    Image := TBitmap.Create;

    { ... unwichtig ... }

    //"Zurück geben"
    Dest := Image;

  finally
    //Image frei geben
    Image.FreeImage;
    Image.Free;
  end;
end;
Ich glaube der Fehle liegt bei Dest := Image; ka obs stimmt
Lars
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 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