Wyświetlenie obrazu w GraphicView



  • Witam!

    Buduje aplikację która ma porównywać obrazy i pracować na pikselach załadowanych obrazów (porównywanie dwóch obrazów, wykrywanie krawędzi itp itd). Na głównym formie ma wyświtlać załadowany wcześniej obrazek. Do tego celu używam widgetu GraphicView i chce załadować obraz do niego za pomocą przycisku jednak coś jest nie tak i dlatego zdecydowałem się tu napisać. Może podpowiecie mi co robie źle lub poradzicie jak to zrobić. Oto mój kod który jest pod przyciskiem na formie:
    @ QString nazwaZdjecia1 = QFileDialog::getOpenFileName(this, tr("Otwórz plik"), "C:/", tr("Obrazy (*.jpg .png .bmp)"));
    QFile ladowanyPlik(nazwaZdjecia1);
    QString sciezka = ladowanyPlik.fileName();
    ui->lineEditZdjecie1->setText(nazwaZdjecia1);
    if(!sciezka.isEmpty()){
    QImage obraz(sciezka);
    if(obraz.isNull()){
    QMessageBox::information(this,"","Wystąpił błąd podczas wyświetlania obrazu! Spróbuj ponownie.");
    return;
    }
    QGraphicsScene
    scena = new QGraphicsScene();
    QGraphicsPixmapItem
    item = new QGraphicsPixmapItem(QPixmap::fromImage(obraz));
    scena->addItem(item);
    ui->graphicsViewZdjecie1->setScene(&scena);
    ui->graphicsViewZdjecie1->show();
    }
    QByteArray zawartoscPliku(ladowanyPlik.readAll());@

    Jestem jeszcze zielony jesli chodzi o poruszanie się w Qt (to jest mój pierwszy projekt w tym środowisku) dlatego każda pomoc będzie nioceniona. Kompilator zgłasza błąd z QGraphicPixmap że nie posiada on konstruktora (biblioteka załączona na początku przez #include) oraz że nie można go konwertować do QGraphicItem. Inna sprawa że muszę jakoś wydobyć piksele z załadowanego obrazu aby potem na nich operować i nie wiem czy samo załadowanie danych obrazu do tablicy bajtów wystarczy czy trzeba to jakoś inaczej wykonać. JEśli tak jest, to jak to zrobić?



  • No to może tak. Co zrobić i jak aby poprawnie wyświetlać obraz w GraphicView, który jest ładowany z przycisku poprzez obiekt QFile. Czy powyższy kod powinien działać czy może podejście ze scenami i itemami jest błędne?

    Bardzo was prosze o pomoc bo póki co nie znalazłem niestety rozwiązania tego problemu :/



  • Twój kod u mnie się skompilował gdy na poczatku pliku dodałem:

    @#include <QGraphicsPixmapItem>
    @



  • Troche udało mi si ę już pozmieniać ten kod i zdobyć wiedze na temat obiektu item, który niekoniecznie musi być używany (a już napewno nie jako wskaźnik) jeśli mamy do czynienia z najnowszym Qt w wersji 5.x dlatego iż w tej wersji pamięć przez niektóre funkcje jest inaczej adresowana. Też mnie to na początku zdziwiło no ale tak jest. W tej chwili mój kod wygląda tak:
    @ QGraphicsScene *scena = new QGraphicsScene(ui->graphicsViewZdjecie1);
    QPixmap mapaPikseli(nazwaZdjecia1);
    scena->addPixmap(mapaPikseli);
    ui->graphicsViewZdjecie1->setScene(scena);
    ui->graphicsViewZdjecie1->fitInView(scena->itemsBoundingRect(),Qt::KeepAspectRatio);
    ui->graphicsViewZdjecie1->show();@

    Z tego co udało mi się ustalić obiekt item, który wcześniej używałem aby działać na pixmapie jest zgodny ale wyłącznie w wersjach wcześniejszych niż Qt 5.x To tak dla potomności... :)

    Czy ktoś się orientuje czy i ewentualnie w jaki sposób można wyciągać i modyfikować piksel po pikselu z tej pixmapy czy trzeba to wrzucać do tablicy bajtowej i wyciągać z tego dopiero pojedyncze piksele oraz czy jest jakiś sposób na wstępne obcinanie i skalowanie obrazu np. aby usunąc nadmiar jakiegoś koloru w obrazie?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.