Oggi vedremo come utilizzare le classi del namespace System.Drawing, per creare due semplici metodi che si possono rivelare molto utili; il primo fa un resize dell'immagine data una certa larghezza, mentre il secondo ne diminuisce l'alpha, in modo da darle un effetto di trasparenza.
Il resize dell'immagine può essere fatto anche utilizzando il metodo GetThumbnailImage della classe Bitmap, metodo molto utile per creare immagini Thumbnail in modo dinamico, ma che però vuole come parametri sia la larghezza che l'altezza della nuova immagine, togliendo così la possibilità di mantenerne le dimensioni in percentuale; per questo mi è sembrato utile fare un metodo ad hoc che lo permetta.
Il codice non fa altro che calcolare l'altezza della nuova immagine in percentuale, percentuale che viene precedentemente calcolata in base alla larghezza del'immagine di partenza e quella decisa dall'utente, ed infine, creare la nuova immagine ridimensionata tramite l'uso dei metodi della classe Graphics, classe che incapsula una superficie di disegno GDI+.
public static Bitmap Resize(Bitmap b, int x)
{
try
{
int width = x;
int height = 0;
//Calcolo la percentuale di ridimensionamento
double percentage = (x * 100);
percentage = percentage / b.Width;
percentage = percentage / 100;
//Calcolo la nuova altezza in base alla percentuale di resize
height = Convert.ToInt32(b.Height * percentage);
//Creo la nuova Immagine
Bitmap result = new Bitmap(width, height);
Graphics g = Graphics.FromImage(result);
g.DrawImage(b, new Rectangle(0, 0, width, height),
0, 0, b.Width, b.Height, GraphicsUnit.Pixel);
return result;
}
catch(Exception exe)
{
Console.WriteLine(exe.Message);
return null;
}
} Vediamo ora, invece, come modificare l'alpha di un immagine, in modo tale da renderla trasparente; anche in questo caso ci avvaliamo dell'uso dei metodi della classe Graphics per ridisegnare l'immagine, e delle classi ColorMatrix e ImageAttributes rispettivamente per applicare una matrice 3x3 contenente le coordinate dello spazio RGB modificate secondo il nostro nuovo parametro per l'alpha e per applicare questa matrice all'immagine.
public static Bitmap EditAlpha(Bitmap b, float alpha)
{
try
{
//Creo la nuova immagine vuota
Bitmap result = new Bitmap(b.Width, b.Height);
//Creo la superficie di disegno GDI+
Graphics g = Graphics.FromImage(result);
//Setto lo sfondo bianco e la matrice 3x3 con le coordinate
//dello spazio RGB modificate secondo il parametro dell'alpha
g.Clear(Color.White);
ColorMatrix cm = new ColorMatrix();
cm.Matrix33 = alpha;
//Applico la matrice
ImageAttributes ia = new ImageAttributes();
ia.SetColorMatrix(cm);
//Ridisegno l'immagine modificata
g.DrawImage(b, new Rectangle(0, 0, b.Width, b.Height),
0, 0, b.Width, b.Height, GraphicsUnit.Pixel, ia);
return result;
}
catch(Exception exe)
{
Console.WriteLine(exe.Message);
return null;
}
} I due metodi descritti, possono essere utilizzati, in una console application, in questo modo:
[STAThread]
static void Main(string[] args)
{
if(args.Length != 0 && args[0] != null)
{
Bitmap oldImg = new Bitmap(args[0]);
//Ridimensiono l'immagine ad una larghezza di 50 pixel
Bitmap newImg = Resize(oldImg, 50);
newImg.Save("resize_" + args[0]);
newImg = null;
//Diminuisco l'alpha del 70%
newImg = EditAlpha(oldImg, 0.3f);
newImg.Save("alpha_" + args[0]);
}
} Producendo questo risultato:
| Immagine di partenza |
Resize dell'immagine |
Modifica alpha |
 |
 |
 |
|
|
|