How to display a picture
-
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.
-
Only type "C:/Users/David/Documents/addddd/r.jpg", without the "file://". The pixmap constructor takes a file path and not an URL.
-
@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:
-
@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 ;) -
@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 ?
-
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 ?
-
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
-
@Payx said in How to display a picture:
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)
A small info, u can also place image in resource file of the project , so no need to worry about absolute path.
-
@mrjj said in How to display a picture:
int step=4; for (i=0,i<s.width()+1,i=i+step) for (j=0,j<s.height()+1,j=j+step) just use QImage QImage::copy(int x, int y, int width, int height) const
This will generate small images of each 4x4
Okay i will test that.
I got an other question, with that code : "QImage img("C:/path/filename.jpg");" i have to put the destination of the file (sorry for my english)
but if i want to create a file explorer (for example in facebook we can change a picture with a file explorer and choose what picture i want)
what can i do ? -
- but if i want to create a file explorer (for example in facebook we can change a picture with a file explorer and choose what picture i want)
Im not 100% sure what you ask, but I give a guess:
Instead of using a fixed path in the program you can use
http://doc.qt.io/qt-5/qfiledialog.html
to let user browser and select an image.Like in this example
http://doc.qt.io/qt-5/qtwidgets-widgets-imageviewer-example.htmlso
QImage img("C:/path/filename.jpg"
becomesQString imagefile = QFileDialog::getOpenFileNames(this, tr("Files"), QDir::currentPath(), tr("*.jpg *.png"));
QImage img(imagefile);Hope that is what you asked about.
-
I found what i sought :
QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Image"),"/path",tr("Image Files (*.jpg)"));
But i got all files, and i just want .jpg for now """"""tr("Image Files (*.jpg)"));"""""""""" dont work ?
then i want to put my picture file in a label, but i can't find how to convert a QStringList to a Qimage or Qpixmap
-
@Payx
it should work with *.jpg.- but i can't find how to convert a QStringList to a Qimage or Qpixmap
Oh just use
fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), "/", tr("Image Files (*.png *.jpg *.bmp)"));It only returns the 1 filename. ( NOTE THE MISSING s)
ui->mylabel->setPixmap( new QPixmap(fileName ));