facciamo la conoscenza di DynamicImage e dei file asix in .net2

di Marco Leoncini, in asp.net,

con l'aggiunta del WebControl DynamicImage nel FrameWork 2.0 fa la sua comparsa un nuovo namespace (non è l'unico) System.Web.UI.Imaging e una nuova estensione di file .asix.

entriamo nel dettaglio, con DynamicImage il framework fornisce un servizio interno per la  creazione di immagini "al volo" ovvero ridimensiona e converte nei vari formati supportati dal web , in più le immagini create dinamicamente vengono salvate in cache.
ma se il servizio ci fosse stretto possiamo crearne uno tutto nostro, ed ecco che entra in gioco il file .asix

<%@ Image Language="C#" Class="Image" %>

using System;
using System.Drawing;

public class Image : System.Web.UI.Imaging.ImageGenerator {

protected override void RenderImage (Graphics g)
{
g.DrawString("test", new Font("Verdana", 12), Brushes.White, 0, 0);
}

}

 

alla creazione il nostro file si spresenta così, abbiamo una nuova classe che erdità da System.Web.UI.Imaging.ImageGenerator il quale fornisce le funzionalità base per la creazione di servizi custom per la creazione di immagini .


come utilizzare questo file?

creiamo una  pagina aspx , aggiungiamo il nuovo controllo DynamicImage ed una classica DropList che ci servirà per selezionare la dimensione dell?immagine:


<asp:DynamicImage ID="DynamicImage1" Runat="server" BorderStyle="Groove">

</asp:DynamicImage>

<asp:DropDownList ID="DropDownList1" Runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">

<asp:ListItem>seleziona un dimensione</asp:ListItem>

<asp:ListItem Value="150">piccola</asp:ListItem>

<asp:ListItem Value="300">grande</asp:ListItem>

</asp:DropDownList>

nel codebehind

 

public partial class Default2_aspx

{

void Page_Load(object sender, EventArgs e)

{

NewMethod();

}

private void NewMethod()

{

DynamicImage1.ImageType = System.Web.UI.Imaging.ImageType.Jpeg;

DynamicImage1.Width = 130;

DynamicImage1.Parameters.Add("immagine","test2.jpg");

DynamicImage1.Parameters.Add("testo", "test del servizio");

DynamicImage1.ImageGeneratorUrl = @"Image.asix";

}

void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)

{

DynamicImage1.Width = int.Parse(DropDownList1.SelectedValue);

}

}

 

nel page load richiamiamo un metodo che con molta fantasia ho chiamato NewMethod,

impostiamo il tipo di immagine che deve generare DynamicImage, la sua larghezza e aggiungiamo alla collezione Parameters i parametri che verranno passati al servizio, infine url del servizio.

ecco il codice del servizio modificato per l?occorrenza

 

<%@ Image Language="C#" Class="Image" %>

 

using System;

using System.Drawing;

 

public class Image : System.Web.UI.Imaging.ImageGenerator {

protected override void RenderImage (Graphics g)

{

string text = Parameters["testo"].ToString();

g.DrawString(text, new Font("Verdana", 12), Brushes.White, 0, 0);

}

 

protected override System.Drawing.Image CreateImage(int width, int height)

{

string pFilePath = this.Parameters["immagine"].ToString();

string filePath= this.Server.MapPath(filePath );

System.Drawing.Image OriginalImage = System.Drawing.Image.FromFile(test);

Decimal decRatio = ((Decimal)OriginalImage.Height / OriginalImage.Width);

int intHeight = (int)(decRatio * width);

Bitmap myBitamp = new Bitmap(OriginalImage, width, intHeight);

return myBitamp;

}

}

 

il primo metodo ad essere richiamato è CreateImage, vengono passati due interi che rappresentono le dimensioni dell?immagine da creare, il codice è semplicissimo ricavo il nome del file dalla collezione Paramaters, calcolo le nuove dimensioni e creo una nuova bitmap.

seccessimavemente, viene richiamato il metodo RenderImag,e che si occupa di aggiungere del testo tramite l?oggetto Graphic che è stato inizializzato con l?immagine creata precedentemente.

 

Le novità non si fermano qua, possiamo decidere se salvare le immagini in memoria o su disco e altro ancora decidere un?immagine di default in casi si verificassero errori nel servizio (il più classico è un?eccezione IO)

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.

Nella stessa categoria
I più letti del mese