Ridimensionare immagini in Qt

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!