Ridimensionare immagini in Qt
Oggi vi propongo una semplice classe Qt per il ridimensionamento delle immagini.
Questa classe la uso praticamente tutti i giorni in un programma che mi sono creato per lavoro.
E' molto easy, e consiste di un solo metodo statico.
Per il ridimensionamento, seguendo il consiglio del forum HTML.it, ho usato QImage e non QPixmap; qui potete trovare una spiegazione.
Questo il file di intestazione:
// imageresize.h
#ifndef IMAGERESIZI_H
#define IMAGERESIZI_H
#include
#include
#include
#include
class ImageResize
{
public:
virtual ~ImageResize();
static void resize(QString inputImage, QString dir, int width, int height);
};
#endif // IMAGERESIZI_H
Il metodo resize richiede 4 parametri:
- l'immagine di iniziale
- la directory dove salvare le immagini
- la largezza
- l'altezza
Questo il file di implementazione:
// imageresize.m
#include "imageresize.h"
void ImageResize::resize(QString inputImage, QString dir, int width, int height)
{
QFileInfo f(inputImage);
QImage pixmap(inputImage);
QImage newPixmap;
if (width == 0)
{
newPixmap = pixmap.scaledToHeight(height, Qt::SmoothTransformation);
}
else if (height == 0)
{
newPixmap = pixmap.scaledToWidth(width, Qt::SmoothTransformation);
}
else
{
newPixmap = pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
}
QFile file(dir + f.fileName());
file.open(QIODevice::WriteOnly);
newPixmap.save(&file, 0, 100);
file.close();
}
ImageResize::~ImageResize()
{
}
Gli if servono per questo:
- se sono indicate entrambe le dimensioni, l'immagine viene settata seguendo quelle (metodo scaled)
- se viene indicata solo larghezza e altezza=0, l'altezza viene calcolata automaticamente (scaledToWidth)
- se viene indicata solo l'altezza e larghezza=0, la larghezza viene calcolata automaticamente (scaledToHeight)
Fate un pò di prove per capire le differenze.
Enjoy!
qt c++ qimage scaled scaledtowidth scaledtoheight
Commentami!