mercoledì 15 ottobre 2025

C# applicare un effetto sfocatura annerita ad un'immagine a colori con una parte non applicabile Effetto bokeh

 

C# effetto bokeh

In questo esempio di codice nel linguaggio di programmazione C#, vediamo applicare l'effetto bokeh, o meglio una particolare patina scura su un'immagine colore ed una parte dell'immagine che rimane esente da questo effetto.

Utilizzeremo le classi del Framework .Net 9, in particolare quelli presenti nello spazio dei nomi System.Drawing.


Di seguito si riporta il frammento di codice dello spazio dei nomi per la gestione della grafica, da inserire in alto, sopra ad ogni dichiarazione.

C#

using System.Drawing.Imaging;


Nell'evento click di un pulsante, di un progetto di tipo "Windows Application", scriviamo il codice che applica ad un file di tipo jpg l'effetto e crea un nuovo file con questo effetto.

C#

        private void BtnEffettoSfocatura2_Click(object sender, EventArgs e)

        {

            try

            {

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

                string immagineNuovaSfocatura = "C:\\varie\\faroSfocatura2.jpg";

                // Carica l'immagine originale

                Bitmap originalImage = new Bitmap(immagineOriginale);

 

                // Crea un'immagine per il risultato

                Bitmap bokehImage = new Bitmap(originalImage.Width, originalImage.Height);

 

                // Crea una maschera per il soggetto

                Bitmap mask = new Bitmap(originalImage.Width, originalImage.Height);

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

                {

                    // Disegna un'ellisse bianca per rappresentare il soggetto

                    g.FillEllipse(Brushes.White, new Rectangle(100, 100, 200, 200)); // Modificare le coordinate e le dimensioni secondo necessità

                }

 

                // Applica la sfocatura allo sfondo

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

                {

                    // Disegna l'immagine originale

                    g.DrawImage(originalImage, 0, 0);

 

                    // Applica un filtro di sfocatura gaussiana (simulato)

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

                    {

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

                        {

                            // Controlla se il pixel è all'interno della maschera

                            if (mask.GetPixel(x, y).A == 0) // Se il pixel non è bianco (trasparente)

                            {

                                // Applica la sfocatura

                                Color originalColor = originalImage.GetPixel(x, y);

                                Color blurredColor = Color.FromArgb(originalColor.A, originalColor.R / 2, originalColor.G / 2, originalColor.B / 2); // Esempio di sfocatura

                                bokehImage.SetPixel(x, y, blurredColor);

                            }

                        }

                    }

                }

 

                // Salva l'immagine

                bokehImage.Save(immagineNuovaSfocatura, ImageFormat.Jpeg);

 

                // Libera le risorse

                originalImage.Dispose();

                bokehImage.Dispose();

                mask.Dispose();

 

                Console.WriteLine("Creata immagine con Effetto bokeh");

 

            }

            catch (Exception ex)

            {

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

            }

        }


Nessun commento: