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