| Autor |
Beitrag |
ak
      
Beiträge: 240
Suse Windows 9 XP
D6 Professional
|
Verfasst: Mo 26.01.04 11:09
Hallo Leute,
ich habe eine sehr umfangreiche Zeichenroutine, welche aus den Daten einer Datenbank eine Zeichnung erstellt. Diese Zeichnung wird auf einem TImage über Canvas. realisiert. In dieser Zeichenroutine sind unter anderem eine Menge "Textout", "MoveTo", "LineTo" und CopyRect-Anweisungen drin. Diese Zeichenroutine, welche ich nicht erstellt habe, aber verändern muss, frisst auf schwachen Rechnern zuviel Speicher und bringt mir dann entsprechende Meldungen (Zuwenig Speicher für diese Operation). Wie könnte ich das umgehen?
_________________ Gruß AK
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mo 26.01.04 15:09
bist du sicher, dass es an dem Zeichnen und nicht an der Datenbank(auslesung) liegT?
|
|
ak 
      
Beiträge: 240
Suse Windows 9 XP
D6 Professional
|
Verfasst: Mo 26.01.04 15:33
Das ist schwer zu sagen, wie könnte man das herausfinden?
In einem anderen Board wurde mir empfohlen ansatt eines Timage eine Paintbox zu nehmen, was aber auf schwachen Rechnern ebenfalls zu einer Fehlermeldung, über zu wenig Arbeitsspeicher führt.
Gruß
_________________ Gruß AK
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 26.01.04 15:41
Es würde vielleicht helfen, wenn du ein bisschen Code der Zeichenroutine zeigen würdest.. eine Fehleranalyse ohne Code ist nicht ganz leicht, und nicht jeder hat eine Glaskugel zu Hause stehen.. 
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
ak 
      
Beiträge: 240
Suse Windows 9 XP
D6 Professional
|
Verfasst: Mo 26.01.04 16:02
Hallo Motzi,
diese Routine ist zu umfangreich und verzweigt um sie hier zu posten. Ich denke, dass es da auch Standardtips geben muss um so etwas speichersparender hinzukriegen. Wie Paintbox anstatt TImage, was aber erstmal nichts gebracht hat.
_________________ Gruß AK
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 26.01.04 16:13
was soll denn das hier werden? du diskuttierst in 2 Foren und gibts nicht alle Infos.
www.delphipraxis.com...1caa92c5664323159824
dort steht zum Bsp, daß du mit großen bitmaps arbeitest, das fehlt hier. Und ohne Code wirds eh schwierig.
gugg mal auf www.efg2.com dort gibt es einen Artikel über LargeBitmaps, was für probleme entstehen können (hängt teilweise auch vom Betriebssystem ab, wenn ich mich recht erinnere).
edit: www.efg2.com/Lab/Gra.../VeryLargeBitmap.htm
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mo 26.01.04 16:41
schauen obs an der Datenbank liegt: einfach mal das zeichnen weglassen....
oder mal zeichnen ohne Daten aus der Datenbank...
dann müsste man sehn, wo der Fehler liegt...
|
|
ak 
      
Beiträge: 240
Suse Windows 9 XP
D6 Professional
|
Verfasst: Mo 26.01.04 16:41
Hallo Keldorn,
dass ich ein TImage benutze steht in den Beiträgen über dir sehr wohl drin, zum Quellcode kann ich nur sagen, dass ich ihn nicht rausgeben kann.
Übrigens:
das Bild ist ca. 1,5 Bildschirme hoch und 4,14 Meter breit (scrollbar), da es sich um geographische Daten handelt, die in einem korrekten Maaßstab angezeigt werden, kann ich die Breite ziemlich genau angeben.
Auf einem Athlon 2000 mit 512mb Ram reicht der Speicher für dieses Bild auch nicht.
Das ist aber das grösste Bild, welches in einer anderen Version das Programms in zwei Teile aufgeteilt wird.
Gruß
@Fiji-Fighter: Das es an der Datenbank liegt, kann ich ausschließen.
_________________ Gruß AK
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mo 26.01.04 16:44
na klasse... dann liegt der Fehler ja nicht an den Linetos sondern an dem riesigen Bild
hast da das alels in einer jpg oder bmp datei?
du könntest immer nur den Teil laden der gerade angezeigt ist -> für jede Bildschirmbreite ein Image, dann hast du maximal zwei bildschirmbreiten geladen, was noch klappen müsste...
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 26.01.04 16:48
| ak hat folgendes geschrieben: | Hallo Keldorn,
dass ich ein TImage benutze steht in den Beiträgen über dir sehr wohl drin, zum Quellcode kann ich nur sagen, dass ich ihn nicht rausgeben kann.
|
ich habe überhaupt nichts von einem TImage geschrieben
| Zitat: |
das Bild ist ca. 1,5 Bildschirme hoch und 4,14 Meter breit (scrollbar), da es sich um geographische Daten handelt, die in einem korrekten Maaßstab angezeigt werden, kann ich die Breite ziemlich genau angeben.
|
dann lies dir den efg-beitrag durch
allerdings stellt sich für mich die Frage, ob du hier nicht einen aufbaufehler hast. Zeichne nur den ausschnitt, den du auf dem Bildschirm ausgibst und nicht alles. deine Bitmap muß ja riesig sein - kein Wunder, das das solange dauert. oder schreib deine Ausgaben so, daß du dein Bild kacheln kannst und immer nur teilbereiche zeichnest. (wurde dir ja auch schon empfohlen)
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
ak 
      
Beiträge: 240
Suse Windows 9 XP
D6 Professional
|
Verfasst: Mo 26.01.04 17:06
Hallo Keldorn,
der Link ist wirklich interessant, ich denke mir wird dann wohl nichts anderes übrig bleiben, als das Bild zu zerteilen, da es selbst bei 8bit zu viel für den Arbeitsspeicher ist.
Wenn jemand eine andere Idee hat, ich bin gespannt.
Gruß
_________________ Gruß AK
|
|
umpani
      
Beiträge: 389
|
Verfasst: Mo 26.01.04 19:48
Hallo,
ich habe es zwar selbst nich nicht probiert, aber ist es wirklich notwendig, mit einem bitmap zu arbeiten?
Schau mal bei Torry.net nach, ob es da nicht was für Meta-Dateien gibt,
Dort werden nicht die Pixel gespeichert, sondern nur die Vektoren der Linien,
Gruß Umpani
_________________ Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
|
|