giovedì 16 ottobre 2025

C# applicare ad una foto o immagine a colori l’effetto Naif

 

C# effetto naif su immagine


In questo esempio di codice nel linguaggio di programmazione C#, vedremo come trasformare una foto o immagine a colori, in una nuova immagine formato jpeg con effetto grafico naif.

Utilizzando le classi presenti nello spazio dei nomi System.Drawing, versione .Net 9, vedremo come trasformare in un progetto Windows application la foto.


Aggiungere al progetto lo spazio dei nomi per la gestione della grafica, di seguito si riporta il codice delle suddette operazioni. 



C#

using System.Drawing.Imaging;



Di seguito si riporta il codice di una funzione, che passando come parametri il nome e percorso dell’immagine da modifica, della nuova immagine e del fattore di riduzione del colore, che permette di simulare il naif, crea la nuova immagine con l’effetto naif. Nel codice i commenti che spiegano tale effetto.



C#

public static void EffettoNaif(string immagineOriginale, string immagineNuovaNaif, int fattoreRidzioneColori)

 {

     try

     {

         //Creo oggetti di tipo bitmap

         Bitmap bitMapOriginale = new Bitmap(immagineOriginale);

         Bitmap bitMapNuovaImmagine = new Bitmap(bitMapOriginale.Width, bitMapOriginale.Height);

 

         //Riduzione dei colori

         for (int y = 0; y < bitMapOriginale.Height; y++)

         {

             for (int x = 0; x < bitMapOriginale.Width; x++)

             {

                 Color pixelColor = bitMapOriginale.GetPixel(x, y);

 

                 // Riduzione dei colori per ogni componente RGB

                 int red = (pixelColor.R / fattoreRidzioneColori) * fattoreRidzioneColori;

                 int green = (pixelColor.G / fattoreRidzioneColori) * fattoreRidzioneColori;

                 int blue = (pixelColor.B / fattoreRidzioneColori) * fattoreRidzioneColori;

 

                 Color newColor = Color.FromArgb(red, green, blue);

                 bitMapNuovaImmagine.SetPixel(x, y, newColor);

             }

         }

 

         //Semplificazione dei dettagli (esempio: applicazione di un filtro blur leggero)

               

         for (int y = 1; y < bitMapNuovaImmagine.Height - 1; y++)

         {

             for (int x = 1; x < bitMapNuovaImmagine.Width - 1; x++)

             {

                 int red = (bitMapNuovaImmagine.GetPixel(x - 1, y - 1).R + bitMapNuovaImmagine.GetPixel(x, y - 1).R + bitMapNuovaImmagine.GetPixel(x + 1, y - 1).R +

                            bitMapNuovaImmagine.GetPixel(x - 1, y).R + bitMapNuovaImmagine.GetPixel(x, y).R + bitMapNuovaImmagine.GetPixel(x + 1, y).R +

                            bitMapNuovaImmagine.GetPixel(x - 1, y + 1).R + bitMapNuovaImmagine.GetPixel(x, y + 1).R + bitMapNuovaImmagine.GetPixel(x + 1, y + 1).R) / 9;

 

                 int green = (bitMapNuovaImmagine.GetPixel(x - 1, y - 1).G + bitMapNuovaImmagine.GetPixel(x, y - 1).G + bitMapNuovaImmagine.GetPixel(x + 1, y - 1).G +

                              bitMapNuovaImmagine.GetPixel(x - 1, y).G + bitMapNuovaImmagine.GetPixel(x, y).G + bitMapNuovaImmagine.GetPixel(x + 1, y).G +

                              bitMapNuovaImmagine.GetPixel(x - 1, y + 1).G + bitMapNuovaImmagine.GetPixel(x, y + 1).G + bitMapNuovaImmagine.GetPixel(x + 1, y + 1).G) / 9;

 

                 int blue = (bitMapNuovaImmagine.GetPixel(x - 1, y - 1).B + bitMapNuovaImmagine.GetPixel(x, y - 1).B + bitMapNuovaImmagine.GetPixel(x + 1, y - 1).B +

                             bitMapNuovaImmagine.GetPixel(x - 1, y).B + bitMapNuovaImmagine.GetPixel(x, y).B + bitMapNuovaImmagine.GetPixel(x + 1, y).B +

                             bitMapNuovaImmagine.GetPixel(x - 1, y + 1).B + bitMapNuovaImmagine.GetPixel(x, y + 1).B + bitMapNuovaImmagine.GetPixel(x + 1, y + 1).B) / 9;

 

                 bitMapNuovaImmagine.SetPixel(x, y, Color.FromArgb(red, green, blue));

             }

         }

 

         //salva L'immagine

         bitMapNuovaImmagine.Save(immagineNuovaNaif, ImageFormat.Jpeg);

         //Libera la memoria

         bitMapOriginale.Dispose();

         bitMapNuovaImmagine.Dispose();

         MessageBox.Show("Effetto naif applicato con successo");

     }

     catch (Exception ex)

     {

         MessageBox.Show("Errore: " + ex.Message);

     }

 }

 


Di seguito il codice per richiamare tale funzione da inserire in un evento click di un pulsante di un progetto Windows Application.


C#

private void BtnEffettoNaif_Click(object sender, EventArgs e)

{

    string immagineOriginale = "C:\\varie\\faro.jpg";

    string immagineNuovaNaif = "C:\\varie\\faroNaif2.jpg";

         

    int fattoreRidzioneColori = 32; // Fattore per la riduzione dei colori (es: 32, 64, 128)

 

    EffettoNaif(immagineOriginale, immagineNuovaNaif, fattoreRidzioneColori);

 

}



Nessun commento: