In questo esempio di codice nel linguaggio di programmazione C# , vedremo come applicare l’effetto puzzle con dei riquadri, come mostrato nella figura precedente, da applicare ad un’immagine a colori.
Utilizzeremo le classi presenti nello spazio dei nomi System.Drawing, in ambiente “Windows Application” con la versione del Framework .Net 9.
Aggiungiamo al nostro progetto Windows Application, lo spazio dei nomi per la gestione della grafica, in alto sopra ad ogni dichiarazione, la seguente dichiarazione.
C#
using System.Drawing.Imaging;
Ora si crea una funzione, che permette di elaborare i riquadri, con linee nere.
C#
public static Bitmap CreaEffettoPuzzleConLinee(Bitmap immagine, int righe, int
colonne, int spessoreLinea, Color coloreLinea)
{
if
(immagine == null || righe <= 0 || colonne <= 0
|| spessoreLinea <= 0)
{
return null;
}
int pieceWidth = immagine.Width / colonne;
int pieceHeight = immagine.Height / righe;
Bitmap puzzleBitmap = new Bitmap(immagine.Width, immagine.Height,
immagine.PixelFormat);
using (Graphics graphics = Graphics.FromImage(puzzleBitmap))
{
// Disegna l'immagine originale (senza mescolare i pezzi)
for (int i = 0; i < righe; i++)
{
for (int j = 0; j < colonne; j++)
{
Rectangle sourceRect = new Rectangle(j *
pieceWidth, i * pieceHeight, pieceWidth, pieceHeight);
Rectangle destRect = new Rectangle(j *
pieceWidth, i * pieceHeight, pieceWidth, pieceHeight);
graphics.DrawImage(immagine, destRect, sourceRect, GraphicsUnit.Pixel);
}
}
// Disegna i tratteggi (linee)
using (Pen pen = new Pen(coloreLinea, spessoreLinea))
{
for (int i = 0; i <= righe; i++)
{
graphics.DrawLine(pen, 0, i * pieceHeight, immagine.Width, i *
pieceHeight);
}
for (int j = 0; j <= colonne; j++)
{
graphics.DrawLine(pen, j * pieceWidth, 0, j * pieceWidth,
immagine.Height);
}
}
}
return puzzleBitmap;
}
A questo punto, nell’evento click del pulsante, richiameremo la funzione indicando un oggetto di tipo bitmap relativo all’immagine, righe e colonne del puzzle, il colore della linea ed il relativo spessore.
Di seguito si riporta il frammento di codice delle suddette operazioni.
C#
private void BtnEffettoPuzzle2_Click(object sender, EventArgs e)
{
try
{
string immagineOriginale = "C:\\varie\\faro.jpg";
Bitmap originalBitmap = new Bitmap(immagineOriginale);
int righePuzzle = 5;
int colonnePuzzle = 5;
int spessoreLinee
= 2;
Color coloreLinea = Color.Black;
Bitmap immagineEffettoPuzzle = CreaEffettoPuzzleConLinee(originalBitmap,
righePuzzle, colonnePuzzle, spessoreLinee, coloreLinea);
// Salval'immagine
immagineEffettoPuzzle.Save("C:\\varie\\faroPuzzle4.jpg", ImageFormat.Jpeg);
originalBitmap.Dispose();
MessageBox.Show("Creata
immagine con effetto puzzle");
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}

Nessun commento:
Posta un commento