How to display a picture
-
wrote on 1 Oct 2016, 20:40 last edited by VRonin 10 Mar 2016, 07:39
Thanks for your time.
I read the tutorial, i stopped at this code :
The function loadFile() is used to load the image.
bool ImageViewer::loadFile(const QString &fileName) { QImageReader reader(fileName); reader.setAutoTransform(true); const QImage newImage = reader.read(); if (newImage.isNull()) { QMessageBox::information(this, QGuiApplication::applicationDisplayName(), tr("Cannot load %1: %2") .arg(QDir::toNativeSeparators(fileName), reader.errorString())); return false; }
I tried this an i got a lot of error...
Can i just have a little code for just display a picture with a label if you can please ?
-
Hi,
You should read the full source of the example here.
-
wrote on 1 Oct 2016, 20:55 last edited by
Thank you, but i was saying is that i got a lot of error.
So i need an image reader to load the picture if i get it.
Than can i use a command like this : ui->label->(probably set picture to a label ?) -
Thank you, but i was saying is that i got a lot of error.
So i need an image reader to load the picture if i get it.
Than can i use a command like this : ui->label->(probably set picture to a label ?)wrote on 1 Oct 2016, 21:17 last edited by A Former User 10 Jan 2016, 21:18@Payx Hi! Showing an image with a
QLabel
is super easy:In your mainwindow.cpp just add the following:
// ... #include <QPixmap> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QPixmap pm("C:/Users/Patrick Wieland/Documents/Kochen/bento.jpg"); // <- path to image file ui->label_2->setPixmap(pm); ui->label_2->setScaledContents(true); } // ...
-
wrote on 1 Oct 2016, 21:31 last edited by
I got this error with your code :
C:\Users\David\Documents\projet\mainwindow.cpp:17: erreur : redefinition of 'MainWindow::MainWindow(QWidget*)'
MainWindow::MainWindow(QWidget *parent) :
^ -
wrote on 1 Oct 2016, 21:33 last edited by
You need to add
#include <QPixmap>
to the other includes and add these three lines...QPixmap pm("C:/Users/Patrick Wieland/Documents/Kochen/bento.jpg"); // <- path to image file ui->label_2->setPixmap(pm); ui->label_2->setScaledContents(true);
to your existing MainWindow constructor.
-
wrote on 1 Oct 2016, 21:39 last edited by
Okay sorry.
I did it but nothing appear in my MainWindow
-
wrote on 1 Oct 2016, 21:42 last edited by A Former User 10 Jan 2016, 23:03
Did you put in the correct path to your image file? The path in the code above is only valid on my harddrive ;-) Also, did you add a QLabel to your MainWindow? I added a QLabel with the designer in Qt Creator and the name of that label is label_2.
-
wrote on 1 Oct 2016, 22:21 last edited by
I put this "file:///C:/Users/David/Documents/addddd/r.jpg"
Yes i added a Qlabel with the .ui and named label (dont worry i changed the name in my code)
-
wrote on 1 Oct 2016, 22:24 last edited by
Only type "C:/Users/David/Documents/addddd/r.jpg", without the "file://". The pixmap constructor takes a file path and not an URL.
-
wrote on 1 Oct 2016, 22:33 last edited by
Its okay it works ! Thanks a lot for your time
To works now with the Qlabel and for example i would like to calculate the numbers of pixels (number of x pixels and y pixels) do you have any tutorial for this ?
-
Its okay it works ! Thanks a lot for your time
To works now with the Qlabel and for example i would like to calculate the numbers of pixels (number of x pixels and y pixels) do you have any tutorial for this ?
wrote on 1 Oct 2016, 22:44 last edited by A Former User 10 Feb 2016, 11:05@Payx Add another QLabel (here its name is label_3) to the MainWindow. We can use that label to display the size of the Pixmap. When adding the label in Qt Creator's Designer, make the label wide enough so that all the text fits in.
In the MainWindow constructor in mainwindow.cpp:
const QSize s = pm.size(); // <- get size of the Pixmap ui->label_3->setText( QString("Size: %1, %2").arg(s.width()).arg(s.height()) );
Edit: Pixmap has a lot of built-in stuff, see QPixmap Class for more. QPixmap is there to display images, to actually put them on the screen. If you want to manipulate an image, you don't use a pixmap for that. Use a QImage then, see: QImage Class.
So, this is the workflow:
- Create a QImage from a file:
QImage img("C:/path/filename.jpg")
; - Do something with that image, like change the color of some pixels.
- Create a QPixmap from that QImage:
QPixmap pm = QPixmap::fromImage(img);
- Show the Pixmap in a QLabel:
ui->label->setPixmap(pm);
- Create a QImage from a file:
-
wrote on 2 Oct 2016, 09:49 last edited by
So if i understand, i use QImage for doing whatever i want with this image.
And i use Qpixmax just for display in a label ?(sorry for my english im not bilingual)
-
wrote on 2 Oct 2016, 10:00 last edited by
So if i want to calculate the size of my picture i use :
QSize QImage::size() const
The question is : how to use it ? there is no example
-
So if i want to calculate the size of my picture i use :
QSize QImage::size() const
The question is : how to use it ? there is no example
Lifetime Qt Championwrote on 2 Oct 2016, 10:21 last edited by mrjj 10 Feb 2016, 10:23@Payx said in How to display a picture:
QImage::size()
It returns a
http://doc.qt.io/qt-5/qsize.html
and you can ask it height / width etc
http://doc.qt.io/qt-5/qsize.html#heightconst QSize MySize = theImage->size();
int h=MySize.height();
etc.
Update:
@wieland already showed ;) -
wrote on 2 Oct 2016, 10:40 last edited by
Thanks but how to return it ?
""ui->label_3->setText( QString("Size: %1, %2").arg(s.width()).arg(s.height()) );""
there is not more simple ?
-
Thanks but how to return it ?
""ui->label_3->setText( QString("Size: %1, %2").arg(s.width()).arg(s.height()) );""
there is not more simple ?
@Payx
Well You need to convert to text anyway so it will becomeui->label_3->setText( "Size: " + QString::number(s.width()) +" "+ QString::number(s.width()) );
Not sure its better.
- Thanks but how to return it ?
What we do there is to convert to text and set that text in some label.
That is not really returning it.
returning it would be something like
QSize SomeFunc() {
return pm.size();
} - Thanks but how to return it ?
-
wrote on 2 Oct 2016, 11:09 last edited by
Thanks it works. I prefer : ui->label_3->setText( "Size: " + QString::number(s.width()) +" "+ QString::number(s.height()) );
because i understand all.Then if i want to use height and width for other calcul i can use :
s.width() * 5 ?If i want to cut my picture in many square or rectangle i have to do :
int h = s.width() and work with h thats right ?
-
Thanks it works. I prefer : ui->label_3->setText( "Size: " + QString::number(s.width()) +" "+ QString::number(s.height()) );
because i understand all.Then if i want to use height and width for other calcul i can use :
s.width() * 5 ?If i want to cut my picture in many square or rectangle i have to do :
int h = s.width() and work with h thats right ?
- int h = s.width() and work with h thats right ?
Yes that's a copy of the current width. ( so w is better name ;)
but its makes the calculation easier to read than using s.width() directly.
Note to actually cut the image, you can use
http://doc.qt.io/qt-5/qimage.html#copy - int h = s.width() and work with h thats right ?
-
wrote on 2 Oct 2016, 15:23 last edited by
Okay !
but : QImage QImage::copy(const QRect &rectangle = QRect()) const
with this code we can work only in one rectangle no ?for example i thought cut my picture in pixels 4*4 and have a new image with resolution / 4 :
i have to use a code like this :
for (i=0,i<s.width()+1,i=i+4)
for (j=0,j<s.height()+1,j=j+4)end
end
12/43