Bildvorschau und Navigator
Bildvorschau und Navigator
Moin!
Ich soll etwas ähnliches programmieren wie es auch in arc4all umgesetzt ist. Hier gibt es von einem abgelegten Dokument eine Miniaturvorschau (Navigator) in der man mit einem Rechteck einen Bereich auswählen kann.
Dieser Bereich wird dann in einer Bildanzeige groß dargestellt.
Kann mir jemand von Euch Tips geben, wie ich das am besten umsetze?
Ich bin bei C++ und QT noch sehr frisch drinn und mir fehlen noch einige Gundlagen.
Danke
Ich soll etwas ähnliches programmieren wie es auch in arc4all umgesetzt ist. Hier gibt es von einem abgelegten Dokument eine Miniaturvorschau (Navigator) in der man mit einem Rechteck einen Bereich auswählen kann.
Dieser Bereich wird dann in einer Bildanzeige groß dargestellt.
Kann mir jemand von Euch Tips geben, wie ich das am besten umsetze?
Ich bin bei C++ und QT noch sehr frisch drinn und mir fehlen noch einige Gundlagen.
Danke
Du hast die Größe deines Original-Bildes. Du hast die Größe deines Anzeige-Fensters.
Damit hast du auch die Größe deines Preview-Widgets und die des RubberBand, sowie die Position des Letzteren in deinem Preview-Widget.
Ich würde eine verkleinerte Kopie des Original-Bildes (QPixmap::scaled()) als Preview anzeigen. Über die Lage und Größe deines Rubberband im Preview kannst du dir den Ausschnitt im großen Bild errechnen und diesen Teil anzeigen.
Ein "cast" von RubberBand nach QPixmap (oder eben QIamge) geht nicht und wäre auch unnötig, da wie oben gesagt sämtliche Größen zur Ausschnittsberechnung bekannt sind.
Damit hast du auch die Größe deines Preview-Widgets und die des RubberBand, sowie die Position des Letzteren in deinem Preview-Widget.
Ich würde eine verkleinerte Kopie des Original-Bildes (QPixmap::scaled()) als Preview anzeigen. Über die Lage und Größe deines Rubberband im Preview kannst du dir den Ausschnitt im großen Bild errechnen und diesen Teil anzeigen.
Ein "cast" von RubberBand nach QPixmap (oder eben QIamge) geht nicht und wäre auch unnötig, da wie oben gesagt sämtliche Größen zur Ausschnittsberechnung bekannt sind.
Das hört sich schon ganz gut an.
Welche Befehle brauche ich für so was? Wie gesagt ich bin noch sehr frisch dabei und mir fehlen noch viele Grundlagen.
Ich gebs auch zu. Ich bekomms nicht hin.
Ich hab bislang nur die Koordinaten im Bild und die Größe des Bereiches. Aber wie schneide ich unter QT etwas aus einem Image aus?
Welche Befehle brauche ich für so was? Wie gesagt ich bin noch sehr frisch dabei und mir fehlen noch viele Grundlagen.
Ich gebs auch zu. Ich bekomms nicht hin.
Ich hab bislang nur die Koordinaten im Bild und die Größe des Bereiches. Aber wie schneide ich unter QT etwas aus einem Image aus?
mmh
das kapier ich jetzt irgendwie gar nicht.
Also, ich habe ein QRubberBand namens rubberband und ein QImage namens m_img. Nun möchte ich den markierten Teil aus rubberband als Vollbild in m_img schreiben und darstellen.
Vorrieges klappt leider nicht. Anscheinend ist in rubberband.rect() kein Inhalt.
Was mache ich noch falsch?
das kapier ich jetzt irgendwie gar nicht.
Also, ich habe ein QRubberBand namens rubberband und ein QImage namens m_img. Nun möchte ich den markierten Teil aus rubberband als Vollbild in m_img schreiben und darstellen.
Code: Alles auswählen
QRect rr = rubberband->rect();
m_img_rubber = m_img.copy(rr);Was mache ich noch falsch?
Das hat gestern nachmittag ein Kollege gemacht. Der ist aber heute krank.
Ich hab grade versucht, nach der Kopie das m_img_rubber neu zu zeichnen. Was gezeichnet wird ist eine leere Fläche. Also muss doch irgendwas im Code falsch laufen, oder seh ich das falsch?
Ich hab grade versucht, nach der Kopie das m_img_rubber neu zu zeichnen. Was gezeichnet wird ist eine leere Fläche. Also muss doch irgendwas im Code falsch laufen, oder seh ich das falsch?
Code: Alles auswählen
void DocView::mousePressEvent(QMouseEvent *event)
{
if (showrubberband)
{
origin = event->pos();
if (!rubberband)
rubberband = new QRubberBand(QRubberBand::Rectangle, this);
rubberband->setGeometry(QRect(origin, QSize()));
rubberband->show();
}
}
void DocView::mouseMoveEvent(QMouseEvent *event)
{
if (showrubberband)
{
rubberband->setGeometry(QRect(origin, event->pos()).normalized());
}
}
void DocView::mouseReleaseEvent(QMouseEvent *event)
{
if (showrubberband)
{
QRect rr = rubberband->rect();
m_img_rubber = m_img.copy(rr);
rubberband->hide();
delete rubberband;
rubberband = NULL;
}
}
void DocView::paintEvent(QPaintEvent */*e*/)
{
.....
p.setRenderHint(QPainter::SmoothPixmapTransform);
p.drawImage(rect().adjusted(1, 1, -2, -2), m_img_rubber);
}
Ich bin mir nicht sicher, aber hast du überprüft, ob das Rechteck, dass du durch das rubberband bekommst im selben Koordinatensystem ist wie das das Image. Ich könnte mir vorstellen, dass du versuchst einen Bereich außerhalb des Bildes zu kopieren. Hast du das mal überprüft?
Du könntest dir mal QRect QImage::rect () const ausgeben lassen und mit deinem Rechteck vergleichen. Evtl auch gleich mit
bool QRect::contains ( const QRect & rectangle, bool proper = false )
überprüfen, ob rr innerhalb des Bildes liegt.
Du könntest dir mal QRect QImage::rect () const ausgeben lassen und mit deinem Rechteck vergleichen. Evtl auch gleich mit
bool QRect::contains ( const QRect & rectangle, bool proper = false )
überprüfen, ob rr innerhalb des Bildes liegt.
tja
gibt mir eindeutig ein TRUE zurück
Code: Alles auswählen
bool so = m_img.rect().contains(rr, false);Noch eine Frage zu dem Thema:
Wenn ich mir die Größe eines Bildes über size() hole und die Position des Rubberband über rubberband.pos(), sind dann die Werte beide Male in Pixel? Oder muss ich noch was umrechnen?
Ich habe jetzt das Problem, das zwar das Bild aus dem Rubberband kopiert wird, aber es wird ein falscher Ausschnitt aus dem Image gewählt und angezeigt.
Hat von Euch schon einmal jemand so etwas mit dem Rubberband gemacht? Kan nmir nciht jemand noch ein paar Tips geben? Danke.
Wenn ich mir die Größe eines Bildes über size() hole und die Position des Rubberband über rubberband.pos(), sind dann die Werte beide Male in Pixel? Oder muss ich noch was umrechnen?
Ich habe jetzt das Problem, das zwar das Bild aus dem Rubberband kopiert wird, aber es wird ein falscher Ausschnitt aus dem Image gewählt und angezeigt.
Hat von Euch schon einmal jemand so etwas mit dem Rubberband gemacht? Kan nmir nciht jemand noch ein paar Tips geben? Danke.