domenica 28 settembre 2025

C# applicare effetto mosaico ad un’immagine a colori con .Net 9

C# effetto mosaico


In questo esempio di codice nel linguaggio di programmazione C#, vediamo come applicare ad un’immagine a colori l’effetto mosaico.

Il frammento di codice utilizza la versione 9 di .Net,   in un progetto di tipo “Windows Application”.

Dopo aver aggiunto lo spazio dei nomi “System.Drawing”, aggiungere nella form, una funzione per applicare il colore medio dell’effetto mosaico.

Di seguito il frammento di codice delle suddette operazioni.


C#

//funzione per il calcolo del colore medio

 private static Color GetColoreMedio(Bitmap image, int startX, int startY, int size)

 {

     int endX = Math.Min(startX + size, image.Width);

     int endY = Math.Min(startY + size, image.Height);

     int r = 0, g = 0, b = 0, count = 0;

 

     for (int y = startY; y < endY; y++)

     {

         for (int x = startX; x < endX; x++)

         {

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

             r += pixelColor.R;

             g += pixelColor.G;

             b += pixelColor.B;

             count++;

         }

     }

 

     // Calcola il colore medio

     return Color.FromArgb(r / count, g / count, b / count);

 }



 Di seguito la funzione per applicare l’effetto mosaico all’immagine.

C#

public static void EffettoMosaico(string inputImagePath, string outputImagePath, int mosaicSize)

 {

     try

     {

         Bitmap immagineOriginale = new Bitmap(inputImagePath);

         Bitmap nuovaImmagineEffettoMosaico = new Bitmap(immagineOriginale.Width, immagineOriginale.Height);

 

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

         {

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

             {

                 // Effettua il calcolo del colore medio del quadrato

                 Color averageColor = GetColoreMedio(immagineOriginale, x, y, mosaicSize);

 

                 //Disegna il quadrato colorato sull'immagine finale

                 using (Graphics g = Graphics.FromImage(nuovaImmagineEffettoMosaico))

                 {

                     g.FillRectangle(new SolidBrush(averageColor), x, y, mosaicSize, mosaicSize);

                 }

             }

         }

 

         // Salva l'immagine finale

         nuovaImmagineEffettoMosaico.Save(outputImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);

         //Libera la memoria

         immagineOriginale.Dispose();

         nuovaImmagineEffettoMosaico.Dispose();

 

         MessageBox.Show("Effetto mosaico applicato con successo!");

     }

     catch (Exception ex)

     {

         MessageBox.Show("Errore nell'applicazione dell'effetto mosaico: " + ex.Message);

     }

 }




Di seguito il frammento di codice per invocare la funzione precedente.



C#

private void BtnEffettoMosaico_Click(object sender, EventArgs e)

{

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

    string nuovaImmagine = "C:\\varie\\faroMosaico.jpg";

    // Chiama la funzione per convertire l'immagine, il 10 è la grandezza del mosaico

    EffettoMosaico(immagineOriginale, nuovaImmagine, 10);

}

Nessun commento: