Sovrapporre un logo ad un'immagine esistente con GDI+

di Marco Leoncini, in ASP.NET, GDI+, System.Drawing,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi