Timage begrenzt auf grösse 9999

Für Fragen von Einsteigern und Programmieranfängern...
Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Timage begrenzt auf grösse 9999

Beitrag von Marc »

Hallo Zusammen.

Erst mal allen ein gutes neues Jahr!

Ich habe so einigen Code zusammengestohlen und experimentiere gerade mit Timage.
Will ein möglichst grosses Bild laden können und dieses verändern, strecken, stauchen, zoom. usw...

Wie es aussieht geht das aber nur bis zu einer maximalgrösse von 9999 pixeln. Wenn ich da drauf malen will komme ich nicht sehr weit.
Muss ich die Bilddaten eventuell erst mal wo anders hin schreiben und dann nur eine verkleinerte Kopie anzeigen?
RAM sollte kein Problem sein. Sind hier 16 GB vorhanden.

Das Programm ist im Anhang, der Einfachheit ist noch eine Bitmap.datei mit dabei zum ausprobieren. (100MB). Also Vorsicht beim Entpacken. :-)
Dateianhänge
upload.zip
(282.37 KiB) 36-mal heruntergeladen
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Mathias »

Ich habe deinen Code probiert zu kompilieren.
Er ist bei FileExistsUTF8 stecken geblieben, was hast du für ein FPC ?

Ich habe FileExistsUTF8 durch FileExists ersetzt, jetzt läuft dein Code.
Wen ich mit "Open Image..." dein BMP lade, passiert nichts.
Drücke ich dann auf "Draw Rectangle in Image", dann wird dein BMP in beiden Fenstern angezeigt.
"Button 2" zeichnet noch ein gelbes Rechteck.

Also Vorsicht beim Entpacken.

Das ging Blitz artig, sind ja nur 96MB.

Ich habe dein Bild mit einem Grafik-Programm auf 16'000 x 8'000 vergrössert.
Dein Program lädt auch diese Datei, nur der Lade-Vorgang geht dann recht lange.

Was für ein OS / Lazarus / FPC verwendest du ?

Ich habe es mit Linux Mint 64Bit probiert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Hallo Mathias

Ja das läuft bei mir in Linux auch gar nicht. Gleicher Effekt.
Kriege bei OpenDialog1.Files.Count) einfach eine 0.
habe das entfernt und jetzt wird das Bild geladen. Also nurt noch : if FileExists(OpenDialog1.FileName) then begin


Geschrieben hab ich das auf Win XP mit Version 1.6

Mit button 2 und 3 versuche ich die Bildgrösse von image2 zu verändern.

Draw rectangle malt ein Rechteck in timage1. Nur zum testen.
Good code comes from experience, experience comes from bad code.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Habe hier eine etwas verbesserte Version. Timage.width lässt sich während der Ausführung verändern.
Das Maximum was ich jetzt lesen kann sind ca. 16'000 Pixels. unter Linux und ca 13000 unter Windows. Aber das ist immer noch nicht sehr viel.

Ich habe auf einer englischen Seite gelesen das das eventuell direkt mit der verbauten Grafikkarte was zu tun hat.
Wenn dem so ist, müsste es mit anderen Programmiersprachen auch ähnliche Probleme geben?
Dateianhänge
Upload2.zip
(190.54 KiB) 37-mal heruntergeladen
Good code comes from experience, experience comes from bad code.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Timage begrenzt auf grösse 9999

Beitrag von wp_xyz »

Ich versteh mal wieder "Bahnhof":
Marc hat geschrieben:Das Maximum was ich jetzt lesen kann sind ca. 16'000 Pixels. unter Linux und ca 13000 unter Windows. Aber das ist immer noch nicht sehr viel.
Was heißt nicht lesen können? Gibt es einen Crash? Hängt das Programm? Oder eine Fehlermeldung?
Was heißt 16.000 Pixel? Insgesamt, also Länge * Breite? Oder nur in einer Dimension? Wieviele Pixel hat dann die andere Dimension?

FileExistsUTF8 ist eigentlich schon die bessere Variante. Allerdings bindet Lazarus standardmäßig die Unit FileUtil ein, in der nur FileExists enthalten ist. Ändere das in LazFileUtils um, dann geht auch FileExistsUTF8.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Wenn ich ein File mit zum Beispiel 26000x13000 Pixeln einlesen will.
Stürzt das Programm komplett ab. In Windows XP ist die Fehlermeldung 'RunError 203' aus Unit 'Bitmap.inc' Prozedur : 'procedure TBitmap.LoadFromStream(AStream: TStream; ASize: Cardinal); '
In Linux 'Projekt proj_open_image hat Exception-Klasse »External: SIGFPE« ausgelöst.In Datei 'lclproc.pas' in Zeile 902'.

In Linux kriege ich beim Oeffnen der Datei bei OpenDialog1.Files.Count) einfach eine 0. statt eine 1. Aber OK. Damit kann ich leben.
Vieleicht wäre es gut in den Code etwas einzubauen um festzustellen auf welcher Platform er gerade läuft. Damit mann sich auf sowas einstellen könnte.
Good code comes from experience, experience comes from bad code.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Timage begrenzt auf grösse 9999

Beitrag von wp_xyz »

Marc hat geschrieben:Wenn ich ein File mit zum Beispiel 26000x13000 Pixeln einlesen will.

Mal kurz überschlagen: 26E3 * 13E3 = 338E6 Pixel. Je nach Format 3-4 Byte pro Pixel macht etwas in der Gegend von 1 GB. Sollte für ein 64-bit Betriebssystem kein Problem sein, aber für 32-bit wird's knapp... Du schreibst, du hast XP - Gab es XP denn schon als 64-Bit Ausführung?

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Hallo. Ja klar gibt es eine 64 bit Version.
https://en.wikipedia.org/wiki/Windows_X ... 64_Edition

Meine ist allerdings 32 bit. (Virtuell). Da Maximum im dortigen Malprogramm liegt bei 32'000 x 32000 Pixeln. Was aber nur andeutet wie es rechnet, Der Speicherbedarf ist dann ca. 3 GB.
Ich kann im selben Malprogramm gleichzeitig noch weitere grosse Files laden. Ich würde mal sagen bei 5-6 GB ist dann wirklich Schluss. Nicht schlecht für ein System von 1999 mit sage und schreibe 2GB RAM. :-)

Meine Ueberschlagung würde dahin gehen, Linux 64 bit 16GB Ram maximale Grösse ca. 24 GByte pro Bild . Und das flüssig. Das speichern auf Disk kann dann auch mal zwei drei Sekunden dauern.
Hab es gerade mal versucht, Gimp macht Files mit 64000x640000 Pixeln. Soviel Platz für die Auslagerung hab ich aber nicht mehr auf der Platte.
Good code comes from experience, experience comes from bad code.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Timage begrenzt auf grösse 9999

Beitrag von wp_xyz »

Marc hat geschrieben:Meine ist allerdings 32 bit. (Virtuell). Da Maximum im dortigen Malprogramm liegt bei 32'000 x 32000 Pixeln. Was aber nur andeutet wie es rechnet, Der Speicherbedarf ist dann ca. 3 GB.

Also ich bezweifle, dass du in einem 32-bit OS bei laufendem Lazarus und Debugger mind 1GB abzwacken kannst. Und evtl ist der Speicherbedarf während des Ladens sogar noch größer. Wie das Malprogramm die 32000x32000 Pixel in kleinere Häppchen zerteilt, weiß man nicht.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Timage begrenzt auf grösse 9999

Beitrag von pluto »

Warum möchtest du eigentlich SOOO große Bilder laden und bearbeiten?

Im Prinzip macht es eigentlich nur extrem wenig sinn.
Du musst ständig Scrollen. Ich würde das Bild eher in kleinere Ausschnitte tun und die dann bearbeiten.

Ist das für ein Spiel? Für ein Grafik Programm ? Für ein Level Editor?
Vielleicht gibt es noch bessere Möglichkeiten.
MFG
Michael Springwald

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Ich hätte eventuell ein Projekt das ich einigermassen einfach realisieren könnte falls es mir gelänge sehr grosse Tiff Dateien direkt zu lesen und zu bearbeiten (umrastern).
Das wurde früher auf der Disk gemacht da schlicht kein Speicher zur Verfügung stand. Hat auch entsprechend gedauert.
Lesen müsste ich nur Graustufen Tiff (keine Farbe). Da weiss ich aber noch nicht wie das geht. Würde natürlich einiges an Speicher sparen.
Das komplette Bild muss ich nicht darstellen können, kann also in irgend einen Speicher, das Resultat darzustellen (kleineres Bild) reicht dann.

Ich hab wohl noch ein Trauma aus der MSDos Zeit. Als maximal 64KB Datenspeicher zur Verfügung standen.
Gefühlte 90% des Codes haben sich schlicht darum gedreht mit den 64KB auszukommen.

Aber heute ist der Speicher da, und ich möchte ihn benutzen können. :-)

Daher scheint mir die Begrenzung von Timage auf 9999 zur Zeit als recht unsinnig. Eine Beschränkung auf 32000 oder ein vielfaches würde ich verstehen da möglicherweise irgend ein Hardware limit.
Vieleicht handet es sich da um ein Erbe aus der MSDos Zeit.? Lazarus kompatibel zu Delphi kompatibel zu Turbo Pascal?
Das darf mir so erscheinen da ich ja noch wenig Ahnung habe.
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Mathias »

Daher scheint mir die Begrenzung von Timage auf 9999 zur Zeit als recht unsinnig.

Wen ich dich richtig verstehe, klappt es bei dir mit 9999 Pixel und mit 10000 ist Schluss ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Im Objektinspektor lässt sich nur 9999 einstellen. Mitlerweile hab ich gemerkt das das auch für Tform gilt.
Alle Weiten und Höhen sind auf 9999 begrenzt (Wie es im Moment aussieht).

Nicht so schlimm eigentlich, ich kann das zur Laufzeit korrigieren.
Im verbesserten Code (zweiter upload) sieht das jetzt alles besser aus. Nur eben das ich keine grossen Files laden kann. Gross wäre > 40'0000 Pixel.

Heute gibts ja schon 40 Megapixel Kameras. Solche Dateien sollte ich mit meinem Computer doch locker bearbeiten können. ;-)
Good code comes from experience, experience comes from bad code.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Timage begrenzt auf grösse 9999

Beitrag von wp_xyz »

Marc hat geschrieben:Heute gibts ja schon 40 Megapixel Kameras. Solche Dateien sollte ich mit meinem Computer doch locker bearbeiten können.

Irgendwie, mit dem Rechnen bist du nicht der beste, oder?

40 Megapixel sind 40 Millionen Pixel. Oben hast du aber von 26.000 x 13.000 Pixeln geredet: 26.000 * 13.000 ist = 338 Millionen Pixel, fast 10x so viel. Oder 32.000 x 32.000 sind 1024 MegaPixel.

Das 40MegaPixel-Bild kriegst du spielend in den Speicher geladen, der einem 32-Bit Programm zur Verfügung steht (40 Millionen x 3 Byte pro Pixel = 120 MB). Bei dem 338-MegaPixel-Bild wird's knapp, das Bild belegt 1GB, aber von den maximal ansprechbaren 4GB geht eine Menge für das Betriebssystem und andere laufende Programme weg. Aber wenn du auf einem 64-Bit-System arbeitest, wo die 4GB-Schwelle fällt, geht auch das (aber nicht vergessen: auch Lazarus muss dann 64 bit sein!).

[EDIT]
Ich habe mir den Thread jetzt nochmals durchgelesen und bin auf einige Unstimmigkeiten gestoßen. Wenn du im Post drüber schreibst "Gross wäre > 40'0000 Pixel.", was heißt da das "40'0000"? Das Hochkomma bezeichnet normalerweise die Millionen, dann wäre die Zahl 40 Millionen, was mit den 40 MegaPixeln weiter vorne korreliert. Weiter oben im Thread steht "Da Maximum im dortigen Malprogramm liegt bei 32'000 x 32000 Pixeln." - heißt das dann 32 Millionen x 32000? - Das wäre etwa 1 Million MegaPixel! Seltsam...

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Timage begrenzt auf grösse 9999

Beitrag von Marc »

Mit der Kamera hast Du Recht.Da war ich etwas zu schnell. :-) Aber immerhin 9000x9000 Pixel.
Wie du ja selber schreibst kann das ein 32 Bit System von 1999.
Mehr noch, das erwähnte Malprogramm macht 32000 x 32000. auf Win XP mit 2GB RAM.
Klar lagert windows da was aus. Aber es läuft bestens.

Das Lazarus auf meinem Linux ist 64 bit.
Also müsste 18 Jahre später etwas mehr drin sein?

Bei 18000 x 18000 ist bei mir bereits Schluss.
Und das ist betrüblich.
Good code comes from experience, experience comes from bad code.

Antworten