lunedì 10 novembre 2025

C# applicare un effetto ondulato ad un'immagine esistente con .Net 9

 

C# effetto ondulato

In questo esempio di codice nel linguaggio di programmazione C#, tramite la versione 9 del framework .Net, vedremo come creare una nuova immagine, da una esistente, applicando l'effetto ondulato, il tutto come mostrato nella figura precedente.

In alto, sopra ad ogni dichiarazione, inseriamo l'aggiunta per il namespace per la grafica, ossia System.Drawing. 

Di seguito si riporta il frammento di codice delle suddette operazioni.


C#

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;


Nell'evento click di un pulsante in un progetto di tipo Windows Application, applicheremo tale effetto ad un'immagine esistente, dopo aver creato un oggetto con la stessa immagine.

Di seguito si riporta il codice per la gestione delle immagine, con alcuni commenti che illustrano i vari passaggi.



C#

private void BtnEffettoVortice_Click(object sender, EventArgs e)

{

try

{

string percorsoNomeFileOriginale = "C:\\varie\\uccelli.jpg";

string percorsoNomeNuovoFile = "C:\\varie\\uccelliEffettoVortice.jpg";

Bitmap originalImage = new Bitmap(percorsoNomeFileOriginale);

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

int centerX = originalImage.Width / 2;

int centerY = originalImage.Height / 2;

double vortexStrength = 0.2;

double maxDistance = Math.Sqrt(centerX * centerX + centerY * centerY); // Distanza massima dal centro

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

{

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

{

// Calcola la distanza dal centro

double dx = x - centerX;

double dy = y - centerY;

double distance = Math.Sqrt(dx * dx + dy * dy);

// Normalizza la distanza per influenzare l'angolo in modo più uniforme

double normalizedDistance = distance / maxDistance;

//Calcola l'angolo, impostato dalla distanza normalizzata

double angle = Math.Atan2(dy, dx) + vortexStrength * (1 - normalizedDistance) * 5; // Regola il moltiplicatore

//Calcola le nuove coordinate

int newX = (int)(centerX + distance * Math.Cos(angle));

int newY = (int)(centerY + distance * Math.Sin(angle));

//Assicura che le nuove coordinate siano all'interno dei limiti

if (newX >= 0 && newX < originalImage.Width && newY >= 0 && newY < originalImage.Height)

{

vortexImage.SetPixel(x, y, originalImage.GetPixel(newX, newY));

}

}

}

vortexImage.Save(percorsoNomeNuovoFile);

MessageBox.Show("Immagine con effetto vortice creata con successo.");

 

 

}

catch (System.Exception ex)

{

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

}

}





Nessun commento: