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.
Approfondimenti
Rigenerare il database negli integration test di ASP.NET Core
Restituire il correlation ID in caso di errore in ASP.NET Core Web API
Eseguire integration test di un progetto ASP.NET Core
Effettuare il tracing asincrono delle chiamate a un'applicazione ASP.NET Core
Testare le impostazioni CORS di un'applicazione ASP.NET Core
Eseguire del codice personalizzato al click di una checkbox in Blazor
Eseguire lo shutdown pulito di un'applicazione ASP.NET Core
.NET Conference Italia 2020
Creare API GraphQL con ASP.NET Core e HotChocolate
Correlare i log in un'applicazione distribuita con ASP.NET Core
L'agenda di #netconfit è online => https://aspit.co/netconfit-20 3 track, tante sessioni e una keynote speciale di @shanselman per la più importante conferenza in lingua italiana su .NET! Vi aspettiamo il 24/11. Iscrizioni sempre aperte! #donet #aspnet #netconf
I più letti di oggi
- il 18/02 c'è il #container & #devops day! https://aspit.co/ContainerDevOpsDay-21 Le iscrizioni sono sempre aperte e la Call For Paper è attiva fino al 28/01! #aspilive #cfp
- Montare una file share con Azure Container Instance
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Testare le impostazioni CORS di un'applicazione ASP.NET Core