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);
}
}

Le opere pubblicate in questo blog sono sotto la licenza Creative Commons. Attribuzione- No commerciale e no derivate.
Nessun commento:
Posta un commento