Visualizzazione post con etichetta .Net Grafica. Mostra tutti i post
Visualizzazione post con etichetta .Net Grafica. Mostra tutti i post

domenica 8 marzo 2026

C# comprimere un file immagine in .NET 10 ridurre la dimensione e generare un nuovo file immagine

In questo frammento di codice nel linguaggio di programmazione C#, vedremo come in un progetto di tipo Windows Application, utilizzando le classi del Framework .NET 10, possiamo ridurre le dimensioni, ossia il peso, di un file immagine.
La tecnica riduce anche di molto i megabyte di un file immagine, senza perdere in qualità.

In un progetto di Windows Forms, in alto, sopra ad ogni dichiarazione, inseriamo lo spazio dei nomi per la gestione della grafica, di seguito si riporta il frammento di tale dichiarazione.


C#

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;



Sempre nella classe form, dichiariamo un enum, una serie di valori, che indicheranno il livello di compressione, ossia di riduzione.


C#

public enum QualitaCompressione

{

    Bassa = 20,

    Media = 40,

    Alta = 60,

    Altissima = 80

}



Sempre nella classe della form, si crea una funzione, che ci restituisce un oggetto di tipo ImageCodecInfo, con il quale possiamo gestire la codifica dell'immagine.
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#

private ImageCodecInfo GetEncoder(ImageFormat format)

{

    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

    foreach (ImageCodecInfo codec in codecs)

    {

        if (codec.FormatID == format.Guid)

        {

            return codec;

        }

    }

    return null;

}



Sempre nella form, scriviamo una funzione, che verrà richiamata dall'evento click di un pulsante, per ridurre l'immagine che viene passata, e crearne una nuova con la riduzione dei megabyte.
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#

public   void Comprimi(string filePath, string filePathCompresso, QualitaCompressione qualita)

 {

     //Oggetto dell'immagine da ridurre le dimensioni

     Image immagine = Image.FromFile(filePath);

 

     //Nuova immagine compressa

     using (FileStream fs = new FileStream(filePathCompresso, FileMode.Create))

     {

         //Oggetto encoder per l'immagine

         ImageCodecInfo encoder = GetEncoder(ImageFormat.Jpeg);

 

         //Imposto i parametri di compressione

         EncoderParameters ep = new EncoderParameters(1);

         ep.Param[0] = new EncoderParameter(Encoder.Quality, (int)qualita);

 

         //Salvo la nuova Immagine

         immagine.Save(fs, encoder, ep);

     }

 

     immagine.Dispose();

 }


Nell'evento click di un pulsante si richiama la funzione appena creata, passando il percorso e nome del file da comprimere, il percorso e nome del nuovo file che verrà ridotta la dimensione, e la qualità di comprensione.
Di seguito si riporta il codice delle suddette operazioni.

C#

private void btnComprimere_Click(object sender, EventArgs e)

 {

     string filePath = @"C:\varie\bicicletta.jpg";

     string filePathCompresso = @"C:\varie\bicicletta_compresso.jpg";

 

    Comprimi(filePath, filePathCompresso, QualitaCompressione.Media);

 

 }

lunedì 23 febbraio 2026

C# creare una gif animata di tipo bianco e nero con il componente gratuito ImageMagick

In questo esempio di codice, vedremo come creare una gif animata di colore bianco e nera, tramite il linguaggio di programmazione C# ed il componente gratuito ImageMagick.

Dopo aver aggiunto ad un progetto di tipo "Windows Application", il componente gratuito "ImageMagick", in alto, nella dichiarazione dei namespace, aggiungo il riferimento a questa libreria.

Di seguito il frammento di codice di esempio.


C#

using ImageMagick;


Dopo aver aggiunto un pulsante nella form, facciamo doppio click sul pulsante, in modo da passare in visualizzazione codice dell'evento stesso.


Tramite le classi messe a disposizione di questa libreria, uniamo le immagini presenti in una cartella, impostando le stesse dimensioni, l'effetto bianco e nero, ed il tempo tra un'immagine e l'altra, andremo a creare un file di tipo Gif animata.
Di seguito si riporta il codice di esempio delle suddette operazioni, commentato per chiarezza delle varie operazioni.

C#

private void BtnCreaGif_Click(object sender, EventArgs e)

 {

 

  string[] immaginiJpg = Directory.GetFiles(@"C:\Varie\Immagini", "*.jpg");//  

 

  //Oggetto che contiene tutte le immagine per realizzare la gif

  using (var raccoltaImmagini = new MagickImageCollection())

  {

      //Imposto le dimensioni per tutte le immagini

      uint width = 800;

      uint height = 600;

      foreach (var immagine in immaginiJpg)

      {

          //Per ogni immagine imposto le dimensioni, l'effetto e l'aggiungo alla raccolta

          var image = new MagickImage(immagine);                  

          image.Resize(width, height);

          //Aggiungo l'effetto griglio

           image.Grayscale();

          // ApplyEffects(image);

          //Aggiungo l'immagine modifica all'oggetto che crea la gif

          raccoltaImmagini.Add(image);

      }

       // Imposto il ritardo tra i fotogrammi (in centesimi di secondo)

      foreach (var image in raccoltaImmagini)

      {

          image.AnimationDelay = 100; // 1 secondo = 100 centesimi di secondo

      }

      //Creo la gif

      raccoltaImmagini.Write(@"C:\Varie\Immagini\nuovaimmagine4.gif");

  }

 

  MessageBox.Show("GIF creata con successo!");

}


domenica 22 febbraio 2026

C# trasformare un immagine in testo in una nuova immagine di tipo jpg

 

C# da immagine a testo

In questo frammento di codice nel linguaggio di programmazione C#, vedremo come trasformare un file immagine di tipo Jpg, in una nuova immagine formato testo.

Il progetto è di tipo Windows Application.

L'immagine originale verrà trasformata in un testo, utilizzando le classi presenti nello spazio dei nomi System.Drawing .

Di seguito la funzione per ottenere un oggetto di tipo ImageCodecInfo.

C#

    private ImageCodecInfo GetEncoder(ImageFormat format)

    {

        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

        foreach (ImageCodecInfo codec in codecs)

        {

            if (codec.FormatID == format.Guid)

            {

                return codec;

            }

        }

        return null;

    }


Di seguito il codice nell'evento click del pulsante, per generare la nuova immagine.

C#


private void BtnScrittaJpg_Click(object sender, EventArgs e)

{

    try

    {

        //Percorso dell'immagine originale

        string percorsoImmagine = @"C:\varie\panchina.jpg";

 

        //Percorso della nuova immagine in formato jpg

        string percorsoNuovaImmagine = @"C:\varie\panchinaTesto2b.jpg";

 

        //Oggetto per l'immagine originale

        Bitmap immagine = new Bitmap(percorsoImmagine);

 

        //Creo un nuovo oggetto di tipo bitmap con lo stesso formato

        Bitmap nuovaImmagine = new Bitmap(immagine.Width, immagine.Height);

 

        //Creo un oggetto Graphics per disegnare sulla nuova immagine

        Graphics g = Graphics.FromImage(nuovaImmagine);

 

        //Imposto lo sfondo trasparente

        g.Clear(Color.Transparent);

 

        //Oggetto Font per la scritta

        Font font = new Font("Arial", 50, FontStyle.Bold);

 

        //Oggetto Brush per la scritta

        Brush brush = new SolidBrush(Color.White);

 

        //Larghezza ed altezza della scritta

        SizeF size = g.MeasureString("Emanuele", font);

 

        //Definisco la posizione della scritta

        float x = (nuovaImmagine.Width - size.Width) / 2;

        float y = (nuovaImmagine.Height - size.Height) / 2;

 

        //Oggetto GraphicsPath per la scritta

        GraphicsPath path = new GraphicsPath();

        path.AddString("Emanuele", font.FontFamily, (int)font.Style, font.Size, new PointF(x, y), StringFormat.GenericDefault);

 

        //Imposto la modalità di ritaglio

        g.SetClip(path);

 

        //Disegno l'immagine originale sulla nuova immagine

        g.DrawImage(immagine, 0, 0);

 

        //Salvo la nuova immagine in formato JPEG

        ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);

        System.Drawing.Imaging.Encoder objEncoder = System.Drawing.Imaging.Encoder.Quality;

        EncoderParameters objEncoderParameters = new EncoderParameters(1);

        EncoderParameter objEncoderParameter = new EncoderParameter(objEncoder, 90L);

        objEncoderParameters.Param[0] = objEncoderParameter;

        nuovaImmagine.Save(percorsoNuovaImmagine, jgpEncoder, objEncoderParameters);

        MessageBox.Show("Immagine creata e salvata in " + percorsoNuovaImmagine);

    }

    catch (Exception ex)

    {

        MessageBox.Show("Errore durante il salvataggio:\n" + ex.Message);

    }

}