Seite 1 von 1

BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Verfasst: 19.04.2010 10:26
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.

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Verfasst: 19.04.2010 13:07
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.

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Verfasst: 19.04.2010 16:13
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.

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Verfasst: 19.04.2010 16:18
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.

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Verfasst: 19.04.2010 16:59
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?).

Re: BigDynamicImageLib bis zu 65536x65536 Pixel bei 16 Bit

Verfasst: 20.04.2010 01:11
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.