![]() |
Allmähliches Out-of-Resources-gehen bei Assign
Hio, ich hab n kleines Probleemchen:
Ich hab ein Bild das ich normalerweise Zeichne aus eben einer Zusammensetzung von Rects und Lines, und einem Rechteck, das darübergelegt wird. Das Bild außer dem Rechteck verändert sich nicht so oft, deswegen habe ich einen Parameter, der bestimmt, ob das Bild neu gezeichnet werden muss oder nicht ("neueAnsicht"). Wenn er true ist, wird das Bild normal neu gezeichnet und dann das Rechteck (ein Rahmen) darüber. Wenn false, dann wird das unter dem Rahmen ligenede Bild aus einer Bitmap geladen und das Rechteck darüber gezeichnet, was ja erheblich schneller geht als neu zeichnen (deshalb wirds gemacht). Seit ich jedoch diese Bitmap drinnen habe, geht es eien Weil egut, dann zeichnet das Bild sich langsamer (neuzeichnen wird durch Mouseover ausgelöst, deshalb passiert das ziemlich oft, der Rahmen soll aber auch durch die Maus bewegt werden, deshalb unumgänglich) und irgenwann gibts nen OutOfResources-Error! Deutet alles auf ein Speicherleck hin :) so nun finde ich es aber nicht... hier der Code, danke schonmal wer sich kurz darein fudelt und sich das ansieht: PS: In meinen Versuchen habe ich das Bild nur 1x neugezeichnet - ganz am Anfang. Also wurde das "Grundbild" immer geladen und dann drübergezeichnet - bis irgendwann der Fehler kam.
Delphi-Quellcode:
//Zeichnen der Werte -Wenn Bedarf besteht.
If neueAnsicht Then begin For i := roundedIndexBegin To roundedIndexEnde do begin X := Round( (i-roundedIndexBegin-verhaeltnisBeginn) * massstabX); Y := Round( friedmanresults[i]*massstabY ); drawBalken( X, innerImageHoehe, Y, balkenstaerke, RGB(205, 205, 205), RGB(130, 130, 130), RGB(225, 10, 45), kappenstaerke, innerIMG, false); innerIMG.Canvas.Pen.Color := RGB(70, 200, 0); If (i-roundedIndexBegin) mod abstandText = 0 Then outerIMG.Canvas.TextOut(X+balkenstaerke div 2, outerImageHoehe-marginBottom+3, IntToStr(i-roundedIndexBegin+1)); If i<roundedIndexEnde Then begin XNext := Round( ((i+1)-roundedIndexBegin-verhaeltnisBeginn) * massstabX); YNext := Round( friedmanresults[i+1]*massstabY ); drawLine(X+balkenstaerke, innerImageHoehe-Y, XNext, innerImageHoehe-YNext, RGB(180, 180, 180), innerIMG); end; end; saveInnerBitmap.Assign(innerIMG); saveOuterBitmap.Assign(outerIMG); end //Wenn kein Grund zum Neuzeichnen besteht kann das Bild hier aus einer alten Bitmap geladen werden. else begin innerIMG.Assign(saveInnerBitmap); outerIMG.Assign(saveOuterBitmap); end; //Zeichnen des Rechtecks ImageFriedmanAnalyse.Cursor := crDefault; If ( mouseX > marginLeft ) And ( mouseY < innerImageHoehe-marginBottom ) And ( mouseX <> -1 ) And ( mouseY <> -1 ) Then begin innerIMG.Canvas.Brush.Style := bsClear; widthZoomRect := Round(zoomValue*innerIMG.Width); XZoomRect := mouseX-widthZoomRect div 2 - marginLeft; if XZoomRect < 0 Then XZoomRect := 0; if XZoomRect > innerIMG.Width-widthZoomRect Then XZoomRect := innerIMG.Width-widthZoomRect; innerIMG.Canvas.Pen.Color := RGB(30, 40, 90); innerIMG.Canvas.Rectangle(XZoomRect, 0, XZoomRect+widthZoomRect, innerImageHoehe); innerIMG.Canvas.Brush.Style := bsSolid; removedZoomRect := false; end; //Zuweisen der Bilder auf ein TImage. //Zeichnen des Bildes MIT Rechteck (Rahmen) auf ein TImage ImageFriedmanAnalyse.Canvas.Draw(0, 0, outerIMG); ImageFriedmanAnalyse.Canvas.Draw(marginLeft, 0, innerIMG); |
Re: Allmähliches Out-of-Resources-gehen bei Assign
Zwei Fragen:
Wo und wann wird das Bitmap erstellt und wo und wann wird es wieder freigegeben? |
Re: Allmähliches Out-of-Resources-gehen bei Assign
Die Bitmaps innerIMG und outerIMG werden in der Prozedur erstellt ... und dort auch freigegeb... !!! aah!
verdammt sie werden nicht freigegeben *schäm* wo kann ich den thread löschen und meinen kopf in den Sand stecken? €: danke |
Re: Allmähliches Out-of-Resources-gehen bei Assign
Quod erat expectandum :mrgreen:
|
Re: Allmähliches Out-of-Resources-gehen bei Assign
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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