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
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)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Modificare il controllo TreeView, il 2 dicembre 2008 alle 19:27
- Perfezioniamo il ProfileDataSorce, il 13 ottobre 2008 alle 11:14
- Un DataSource per il Profile, il 10 ottobre 2008 alle 15:06
- TrueSpace 7 gratuito, il 24 luglio 2008 alle 10:59
- adesso dico la mia sull'Iphone, il 22 luglio 2008 alle 10:33
- Come tutto ebbe inizio, il 21 luglio 2008 alle 09:22