Ridimensionare un'immagine in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Ridimensionare un’immagine con la classe Bitmap in C#
  2. Ridimensionare un’immagine con la funzione Graphics.DrawImage() in C#
  3. Conclusion
Ridimensionare un'immagine in C#

In questo tutorial, discuteremo dei metodi per ridimensionare un’immagine in C#.

Ti guideremo nell’intero processo, dal caricamento dell’immagine originale al salvataggio della versione ridimensionata.

Ridimensionare un’immagine con la classe Bitmap in C#

La classe Bitmap fornisce molti metodi per lavorare con le immagini in C#. La classe Bitmap ottiene i dati dei pixel delle immagini. Possiamo ridimensionare un’immagine inizializzando il parametro Size all’interno del costruttore della classe Bitmap.

Il seguente esempio di codice ci mostra come possiamo ridimensionare un’immagine con il costruttore della classe Bitmap in C#.

using System;
using System.Drawing;
namespace resize_image {
  class Program {
    public static Image resizeImage(Image imgToResize, Size size) {
      return (Image)(new Bitmap(imgToResize, size));
    }
    static void Main(string[] args) {
      string path = "C:\\Images\\img1.jpg";
      Image img = Image.FromFile(path);
      Bitmap imgbitmap = new Bitmap(img);
      Image resizedImage = resizeImage(imgbitmap, new Size(200, 200));
    }
  }
}

Questo codice mostra il processo completo di ridimensionamento di un’immagine utilizzando la classe Bitmap in C#. Vediamo come funziona.

Passo 1: Caricare l’immagine originale

Prima di tutto, è necessario caricare l’immagine originale utilizzando il metodo Image.FromFile. Assicurati di sostituire "C:\\Images\\img1.jpg" con il percorso del tuo file immagine.

string path = "C:\\Images\\img1.jpg";
Image img = Image.FromFile(path);

Passo 2: Convertire l’immagine in un oggetto Bitmap

Successivamente, converti l’immagine caricata in un oggetto Bitmap. Questo passaggio è necessario per eseguire l’operazione di ridimensionamento.

Bitmap imgBitmap = new Bitmap(img);

Passo 3: Ridimensionare l’immagine

Ora viene la parte del ridimensionamento. La funzione ResizeImage prende l’oggetto Bitmap e la dimensione desiderata (new Size(200, 200)) e restituisce l’immagine ridimensionata.

Image resizedImage = ResizeImage(imgBitmap, new Size(200, 200));

Passo 4: Salvare l’immagine ridimensionata

Infine, puoi salvare l’immagine ridimensionata su un file utilizzando il metodo Save. In questo esempio, l’immagine ridimensionata viene salvata come "resized.jpg". Puoi scegliere il formato dell’immagine salvata modificando l’estensione del file (ad esempio, .jpg, .png, .bmp).

resizedImage.Save("resized.jpg");

Ridimensionare un’immagine con la funzione Graphics.DrawImage() in C#

La funzione Graphics.DrawImage() disegna un’immagine all’interno di una posizione e dimensioni specificate in C#. Con questo metodo, possiamo eliminare molti inconvenienti del ridimensionamento di un’immagine. Il seguente esempio di codice ci mostra come possiamo ridimensionare un’immagine con la funzione Graphics.DrawImage() in C#.

using System;
using System.Drawing;
namespace resize_image {
  class Program {
    public static Image resizeImage(Image image, int width, int height) {
      var destinationRect = new Rectangle(0, 0, width, height);
      var destinationImage = new Bitmap(width, height);

      destinationImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

      using (var graphics = Graphics.FromImage(destinationImage)) {
        graphics.CompositingMode = CompositingMode.SourceCopy;
        graphics.CompositingQuality = CompositingQuality.HighQuality;

        using (var wrapMode = new ImageAttributes()) {
          wrapMode.SetWrapMode(WrapMode.TileFlipXY);
          graphics.DrawImage(image, destinationRect, 0, 0, image.Width, image.Height,
                             GraphicsUnit.Pixel, wrapMode);
        }
      }

      return (Image)destinationImage;
    }
    static void Main(string[] args) {
      string path = "C:\\Images\\img1.jpg";
      Image img = Image.FromFile(path);
      Bitmap imgbitmap = new Bitmap(img);
      Image resizedImage = resizeImage(imgbitmap, new Size(200, 200));
    }
  }
}

Vediamo come funziona.

Passo 1: Caricare l’immagine originale

Prima di tutto, è necessario caricare l’immagine originale utilizzando Image.FromFile. Assicurati di sostituire "C:\\Images\\img1.jpg" con il percorso del tuo file immagine.

string path = "C:\\Images\\img1.jpg";
Image img = Image.FromFile(path);

Passo 2: Creare un oggetto Bitmap di destinazione

Crea un oggetto Bitmap di destinazione che conterrà l’immagine ridimensionata. Imposta la sua risoluzione per corrispondere all’immagine originale utilizzando SetResolution.

La funzione destinationImage.SetResolution() mantiene il dpi dell’immagine indipendentemente dalla sua dimensione effettiva.

var destinationRect = new Rectangle(0, 0, width, height);
var destinationImage = new Bitmap(width, height);

destinationImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

Passaggio 3: Ridimensionare l’immagine

Ora, utilizziamo Graphics.FromImage per ottenere un oggetto Graphics associato al Bitmap di destinazione. Impostiamo la modalità di composizione e la qualità per ottenere i migliori risultati.

using (var graphics = Graphics.FromImage(destinationImage)) {
  graphics.CompositingMode = CompositingMode.SourceCopy;
  graphics.CompositingQuality = CompositingQuality.HighQuality;

  using (var wrapMode = new ImageAttributes()) {
    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
    graphics.DrawImage(image, destinationRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel,
                       wrapMode);
  }
}

La proprietà graphics.CompositingMode = CompositingMode.SourceCopy specifica che quando un colore viene reso, sovrascrive il colore di sfondo.

La proprietà graphics.CompositingQuality = CompositingQuality.HighQuality indica che desideriamo solo immagini di alta qualità.

La funzione wrapMode.SetWrapMode(WrapMode.TileFlipXY) impedisce la formazione di aloni attorno ai bordi dell’immagine.

Passaggio 4: Salva l’immagine ridimensionata

Infine, puoi salvare l’immagine ridimensionata su un file utilizzando il metodo Save. In questo esempio, l’immagine ridimensionata viene salvata come "resized.jpg". Puoi scegliere il formato dell’immagine salvata cambiando l’estensione del file (ad esempio, .jpg, .png, .bmp).

resizedImage.Save("resized.jpg");

Conclusion

Il ridimensionamento delle immagini è un’operazione comune nello sviluppo di software e C# offre diverse approcci per realizzarlo. In questo articolo, ci siamo concentrati sul ridimensionamento delle immagini utilizzando la classe Bitmap. Abbiamo seguito l’intero processo, dal caricamento dell’immagine originale al salvataggio della versione ridimensionata.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Articolo correlato - Csharp Image