Nello script 401, con poche e semplici righe di codice, abbiamo ridimensionato un'immagine. Vediamo adesso come, attraverso l'utilizzo della classe Graphics, sia possibile personalizzare le immagini, sovrapponendo ad esempio un logo.
Chiameremo la nostra classe ImageTool, passando al costruttore tramite un parametro di tipo stringa il percorso dell'immagine da personalizzare. Inizializziamo quindi una nuova istanza delle classi Image e Graphics: la classe Graphics rappresenta il cuore delle GDI+, qualsiasi cosa debba disegnare un'applicazione utilizzerà questa classe.
Ecco l'esempio:
using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; namespace ImageTool { public class ImageTool { private Image myImage; private Graphics myGraphics; public ImageTool(string baseImageFile) { myImage = Image.FromFile(baseImageFile); myGraphics = Graphics.FromImage(myImage); } public void AddMark(string timbroFilePath, int alpha, int posX, int poxY) { float alphaf = (float)alpha / 100; //creo un oggetto image a partire da un file esistente Image timbro = Image.FromFile(timbroFilePath); //crea il rettangolo che rappresenterà l'area di disegno Rectangle myRec = new Rectangle(posX,poxY,timbro.Width,timbro.Height); float [][] colorArray ={ // r v b a new float[] {1, 0, 0, 0, 0},//r new float[] {0, 1, 0, 0, 0},//v new float[] {0, 0, 1, 0, 0},//b new float[] {0, 0, 0, alphaf, 0},//a new float[] {0, 0, 0, 0, 1}}; /* legenda * r = rosso * v = verde * b = blu * a = alpha * */ //contiene una matrice 5x5 contenente le coordinate per lo spazio RGBA ColorMatrix myColorMatrix = new ColorMatrix(colorArray); //contiene le informazioni sulla manipolazione del colore ImageAttributes imageAttr = new ImageAttributes(); imageAttr.SetColorMatrix(myColorMatrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap); //disegna l'immagine myGraphics.DrawImage(timbro, myRec, 0, 0, timbro.Width, timbro.Height, GraphicsUnit.Pixel, imageAttr); imageAttr.Dispose(); timbro.Dispose(); } public void Save(string savePath) { myImage.Save(savePath); myGraphics.Dispose(); myImage.Dispose(); } } }
Il metodo AddMark accetta 4 parametri:
- il percorso dell'immagine da sovrapporre;
- la trasparenza;
- l'offset dell'immagine dall'origine.
Il metodo Save rende permanenti le modifiche apportate all'immagine tramite l'oggetto Graphics, salvandole su disco.
Da notare l'uso di ImageAttributes e ColorMatrix, queste due classi rendono possibile manipolare il colore dell'immagine disegnata tramite il metodo DrawImage. Nel nostro caso ci limitiamo a impostarne la trasparenza, ma variando i valori della matrice possiamo ottenere gli effetti più disparati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.