BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Beitrag von NicTheQuick »

Hallo Leute,

ich suche eine Bibliothek oder Funktionensammlung, die folgendes unterstützt:
1) Bildgröße bis 65536x65536 Pixel
2) 16 Bit Farbtiefe für Graustufen
3) Dynamisches Allozieren von Speicher
4) Einzelnes Setzen und Lesen von Pixeln

Am wichtigsten ist wohl Punkt 3, denn ein 8 GB großes Bild im Speicher zu behalten wäre unsinnig. Da sollte dann als Cache die Festplatte benutzt werden. Außerdem sollte Speicherplatz erst dann verwendet werden, wenn auch in ihn geschrieben wird. Soll heißen: Schreibe ich nur in die obere linke Ecke des Bildes, soll der ganze restliche Bildbereich noch keinen Speicherplatz verbrauchen.

Falls niemand so etwas schon mal programmiert hat oder keine Bibliothek kennt, werde ich selbst eine schreiben. Aber ich frage lieber erst mal nach, bevor ich das Rad neu erfinde.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Beitrag von Kaeru Gaman »

[halfofftopic]
65536³ ? ...high resolution height field ...?
früher oder später mußtest du ja mal bei dieser Problematik landen... xD

deine Idee mit dem Auslagern ist ganz nett, ich persönlich würde allerdings doch eher auf ein 64bit system mit min. 32GB RAM setzen und das Image im Speicher lassen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Beitrag von NicTheQuick »

Hehe. Das Problem ist, dass in meinen Laptop nicht so viel Speicher passt. xD

Ich bastel gerade mit meinem Kollegen ein Elektronentunnelmikroskop. Unsere zwei D/A-Wandler zur Positionierung der Wolframnadel arbeiten mit jeweils 16 Bit Genauigkeit. Und der A/D-Wandler hat ebenfalls 16 Bit um den Strom zu messen. Dadurch ergeben sich diese immensen Daten.
Da man aber unmöglich das komplette Bild auf einmal scannen kann, weil das ziemlich lange dauern würde, will ich zuerst ein grobes Bild scannen und danach mit meinem Programm eine Stelle heran zoomen, die dann genauer gescannt wird, usw.

Mein Programm kommuniziert über die COM-Schnittstelle mit einem Atmega8535, der die Ansteuerung der eigentlichen Geräte übernimmt.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Beitrag von Kaeru Gaman »

ahja... ich dachte jetzt erst das gehörte zu deiner Raytracing-Schiene.
aber der Unterschied ob es sich jetzt um ein 65536³ HeightField oder ein 65536³ Elektronentunnelmikroskop-Bild handelt ist wohl für die Verarbeitung und Ausgabe völlig unerheblich.
.... aus dem Elektronentunnelmikroskop-Bild eine Höhen-Landschaft zu rendern sähe wahrscheinlich extrem verschärft aus.

nein sorry, mir ist eine Lib für so einen Dateizugriff nicht bekannt, es wäre aber ja eigentlich simpelstes Random-Access-File.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Beitrag von DarkDragon »

John Carmack's MegaTextures sollten dabei helfen. Dann kann man das ganze schonmal in Echtzeit anzeigen (Ich denke das willst du machen, oder nicht?).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Beitrag von NicTheQuick »

In Echtzeit anzeigen will ich bisher noch nichts.
Aber ich habe mittlerweile eine andere Lösung gefunden, die ich mir dann selbst programmieren werde.

Wen's interessiert:
Man hat von Anfang an ein imaginäres Bild von 65536×65536 Pixeln. Wenn ich jetzt einen Scanvorgang starte, gebe ich dort ja einen rechteckigen Bereich (x1, y1) - (x2, y2) zum Scannen und eine Genauigkeit (xRes, yRes) an. Ist dieser Scanvorgang beendet, wird dieses Bild ganz normal in der entsprechenden Auflösung xRes×yRes gespeichert. Gleichzeitig wird das Bild in das imaginäre Riesenbild in den entsprechenden Bereich gelegt.
Ich werde also sagen können, scanne Bereich (0, 0) - (8000, 6000) bei Auflösung 400×300 und dann wird das so entstandene 400×300-Bild virtuell in den Bereich (0, 0) - (8000, 6000) gelegt, so dass praktisch im Bereich (0, 0) - (20, 20) ein einfarbiger Pixel erscheint, der an Position (0, 0) im 400×300-Bild liegt.
Antworten