[gelöst] Grundsätzlicher Aufbau Bildbetrachter?

Alles rund um die Programmierung mit Qt
Antworten
jj
Beiträge: 2
Registriert: 29. Dezember 2007 14:54

[gelöst] Grundsätzlicher Aufbau Bildbetrachter?

Beitrag von jj »

(Eins vorneweg: ich kenne das mitgelieferte Image Viewer Example. Das geht zwar in die richtige Richtung, aber es sind trotzdem noch einige Fragen offen)

Moin,

ich bin grade mit den Planungen für einen (im ersten Schritt) simplen Viewer für (medizinische) 2D-Bilder beschäftigt. Als Toolkit soll dafür QT zum Einsatz kommen.

Ich habe umfangreiche Erfahrung mit C++, wxWidgets, usw., von daher sollte es kein Problem für mich sein, das Problem irgendwie durch Bastelei zu lösen. Da dieser Viewer aber Grundlage für ein größeres Programmpaket sein soll, möchte ich es nicht irgendwie lösen, sondern richtig! Um einschätzen zu können, was "richtig" ist und was nicht, fehlt mir leider die Erfahrung mit QT. Da ich ein wenig unter Zeitdruck stehe, möchte ich gerne die Phase des Trial-and-errors so weit wie möglich reduzieren.

Und da kommt ihr ins Spiel:
Es wäre nett, wenn mich jemand mir mehr Erfahrung beraten könnte. Mir gehts nicht um Quellcode, sondern um die Einschätzung, welche Widgets/Klassen für meine Anwendung am besten geeignet sind. Mir ist z. B. völlig unklar, ob ich das jetzt eher über QLabel oder QPainter oder sonstiwe löse.

Die Grundfunktion des Programms:
ein Bild von Festplatte laden
-> darstellen
-> der User kann rein und rauszoomen und bei Bedarf das Bild per Maus verschieben

Der Punkt ist im Prinzip durch das Image Viewer Beispiel beantwortet, es gibt nur eine offene Frage:
Die Bilder können recht groß werden. 1024^2 ist Standard, aber wenn ich Pech habe, dann muss ich mit 2048^2 oder noch größeren bildern zurechtkommen.

Ist da der Weg wie das im Image Viewer Beispiel gemacht wird der optimale/schnellste Weg oder müsste man für größere Bilder da was anpassen?

(Dummerweise kann ich das im Moment nicht testen, da ich zur Zeit über Remote Desktop arbeite... *wart* *gähn* *ruckel*)

Erste Zusatzfunktion: Anpassen der Level/Window Einstllungen (sowas wie Helligkeit/Kontrast) in "Echtzeit"
Die Bilder sind Grauwertbilder und liegen als float/double Werte vor. Um die mit QT darzustellen, muss ich die vermutlich in ARGB oder so umrechnen. Bei der Umrechnung kann ich dann direkt noch die Helligkeit und den Kontrast über zwei Parameter einstellen.
Kurz Anwendungsszenario:
Der User dreht an ein paar Knöpfen, die Helligkeit und Kontrast des Bildes steuern. Die Zeit zwischen "Drehen am Knopf" und "Anzeige des neu umgerechneten Bildes" sollte möglichst kurz sein.

Wie würde ein möglichst schneller Weg von
double-Array im speicher -> Umrechnungen der Werte -> Darstellung des neuen Bildes
aussehen?

Zweite Zusatzfunktion: Markieren von Punkten/Bereichen im Bild per Maus
Ich brauche die Möglichkeit, auf das Bild Linien, Punkte usw. Zeichnen und per Maus verändern zu können.
Um z.B. das Rauschen in einem Bildausschnitt zu bestimmen, soll der User per Maus ein Rechteck in das Bild malen können. Dieses Rechteck soll dann per Maus verschoben und verändert werden können.

Wie würde man sowas vom Prinzip her in das Image Viewer Beispiel einbauen?

Bzw.: Das Beispiel arbeitet ja über ein QLabel. Wäre es sinnvoller über QPainter zu arbeiten? Dann hätte ich soweit ich das verstehe Pixmaps und Linien/Punkte in einem Widget zur verfügung.




Wer hat Ideen wie man sowas aufbauen könnte?

Als Antwort würde mir schon reichen:
"Angenommen deine Daten liegen im Speicher: diese Daten rechnest du mit den Werten vom Benutzer um, speicherst die Biltwerte in einem QAAA Bitmap/Pixmap und stellst dieses dann in einem QBBB Widget dar. Falls der User die Umrechnungsgrenzen ändert, ist die schnellst Methode zur Darstellng der neuberechneten Werte die Methode QCCC.methode(). Zum zeichnen der Linien/Punkte/sonstwas auf dem Bild nimm das Widget/Klasse QDDD"

Schonmal danke im vorraus für die Hilfe! :)
Zuletzt geändert von jj am 2. Januar 2008 18:42, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Also, du brauchst QWidget, QPainter und QPixmap. Und jenachdem wie deine Daten im Speicher vorliegen einen QVector. Da du schreibst, daß deine Daten als double-Array vorliegen, wirst du sie selbst umrechnen müssen, da es dafür keine Qt-Funktionen gibt.
jj
Beiträge: 2
Registriert: 29. Dezember 2007 14:54

Beitrag von jj »

Kleines Statusupdate:
Ich benutze eine QGraphicsView und habe keinerlei Geschwindidkeitsprobleme. 4000*3000 Pixel Bilder werden wunderbar verdaut, von daher ist das Problem gelöst.
Antworten