Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Grenzen (Grösse) für timage (https://www.delphipraxis.net/136071-grenzen-groesse-fuer-timage.html)

R2009 23. Jun 2009 06:56


Grenzen (Grösse) für timage
 
Hi,

ich benötige einen extrem grossen canvas für ein Feldberechnungsprojekt.

Delphi-Quellcode:
  image1.Picture.Bitmap.Width:=10000;
  image1.Picture.Bitmap.height:=10000;
Hier meckert das Programm, dass nicht genügent Speicher zur Verfügung steht.
Habt ihr eine Idee wie ich das realisieren könnte. Muss auf einen canvas von mindestens 100000 * 10000 zeichnen.
100000 * 100000 wäre besser.

Delphi-Quellcode:
  t:=tbitmap.Create;
  t.Width:=10000;
  t.height:=10000;
  t.free;
Tbitmap ist auch keine Lösung, das gleiche Problem.

Viele Grüsse

mkinzler 23. Jun 2009 06:59

Re: Grenzen (Grösse) für timage
 
Überlege mal was so ein großes Bild an Speicher benötigt

turboPASCAL 23. Jun 2009 08:14

Re: Grenzen (Grösse) für timage
 
100.000 * 100.000 * 1Bit pro Pixel (swartz/weiss) = 10.000.000.000 Byte
10.000.000.000 Byte / 1024 = 9765625 kByte 9765625 / 1024 = kByte = 9536,7 MByte / 1024 = 9,31 GByte

100.000 * 100.000 * 8Bit pro Pixel (256 Farben) = 80.000.000.000 Byte ... = 74,5 GByte

:gruebel:

Das passt nun Weder in den Graka.-Speicher noch in den RAM des PC's.

Was kann man machen ? einfach die Werte die man Berechnet und darstellen will scalieren.
Dh. wenn der darzustellende Wert 80Mio Einheiten (was auch immer) hat kann man das zB. mit 80 oder 800 Pixeln darstellen.

Sherlock 23. Jun 2009 08:36

Re: Grenzen (Grösse) für timage
 
Skalieren ist eine Maßnahme, die andere ist ja sicherlich auch nur das zu berechnen/zeichnen, was auch wirklich gesehen wird.

Sherlock

R2009 23. Jun 2009 09:49

Re: Grenzen (Grösse) für timage
 
Hi,

skalieren geht nicht. Es werden Feldlinienbilder erzeugt. Dort kommt es absolut auf die Auflösung an.
Des weiteren werden Äquipotentiallinien geschrieben.
Eine Lösung wäre das Ganze in einer Plottersprache abzuspeichern und dann entsprechend auszugeben.
Eine andere Lösung die mir einfällt ist den Canvas zu splitten.
Diesen Weg werde ich wahrscheinlich gehen.
Für die Bildschirmdarstellung wird Skalierung das Mittel zur Lösung des Problems sein.

Vielen Dank

himitsu 23. Jun 2009 09:56

Re: Grenzen (Grösse) für timage
 
Zitat:

Zitat von turboPASCAL
100.000 * 100.000 * 1Bit pro Pixel (swartz/weiss) = 10.000.000.000 Byte
10.000.000.000 Byte / 1024 = 9765625 kByte 9765625 / 1024 = kByte = 9536,7 MByte / 1024 = 9,31 GByte

100.000 * 100.000 * 8Bit pro Pixel (256 Farben) = 80.000.000.000 Byte ... = 74,5 GByte

Die Rechnung stimmt zwar nicht ganz, aber der Grund sollte dennoch klar sein


100.000 * 100.000 * 1 Bit pro Pixel (Schwarz/Weiß) = 1250000000 Byte = 1,2 GB
100.000 * 100.000 * 8 Bit pro Pixel (256 Farben) = 10000000000 Byte = 9,3 GB
100.000 * 100.000 * 24 Bit pro Pixel (8 Bit RGB) = 30000000000 Byte = nur 28 GB :angel2:

Zitat:

Zitat von R2009
Eine Lösung wäre das Ganze in einer Plottersprache abzuspeichern und dann entsprechend auszugeben.

Delphis TImage kann EMF verstehen, aber ich weiß nicht, in wie weit man diese da auch erstellen kann.

Zitat:

Zitat von R2009
Eine andere Lösung die mir einfällt ist den Canvas zu splitten.

dann aber nur die zu erstellen und zu berechnen, welche grad nötig sind, denn auch aufgeteilt würden alle EinzelCanvas diesen Speicher belegen.

turboPASCAL 23. Jun 2009 09:59

Re: Grenzen (Grösse) für timage
 
:duck: Jaja, Kopfrechnen un so...

Bernhard Geyer 23. Jun 2009 10:03

Re: Grenzen (Grösse) für timage
 
Schau dir mal DaVinci an. Diese haben wird auch im Einsatz und haben öfters (TIFF-)Dateien > 10000*10000 Pixel.

R2009 24. Jun 2009 05:27

Re: Grenzen (Grösse) für timage
 
Hi,
ich habe eine Lösung gefunden:
In meinem Fall ist das ganz einfach, ich reduziere die Farbtiefe auf 1 Bit.
Mehr brauche ich für meinen Zweck nicht. Selbst 100000 * 100000 krieg ich noch hin.

Delphi-Quellcode:
  t:=tbitmap.Create;
  t.PixelFormat:=pf1bit;
  t.SetSize(10000,10000);
  t.Canvas.MoveTo(1,1);
  t.canvas.LineTo(9999,9999);
  t.SaveToFile('c:\feld.bmp');
  t.free;
Vielen Dank, mein Problem hat sich damit erledigt.

turboPASCAL 24. Jun 2009 07:36

Re: Grenzen (Grösse) für timage
 
Solange es auf deinem Rechner läuft.

Im Falle dass das Ding auch auf anderen PC's laufen muss oder soll sieht es wohl möglich schlecht aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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