Disegnare una linea

venerdì 04 aprile 2008 - 09.20

illusione Profilo | Junior Member

Salve

vorrei sapere come fare per disegnare linee, rettangoli ecc..

Grazie


freeteo Profilo | Guru

ciao,
se vuoi lavorare con la grafica c'e' tutto il Namespace "System.Drawing" da poter usare.
Quello che fai sostanzialmente è disegnare su un'immagine, in memoria, e poi decidi se vuoi salvarla su disco, o nel caso di asp.net darla in Response.Write... diretta.

Es:

Bitmap bmp = new Bitmap(100, 100); Graphics graph = Graphics.FromImage(bmp); //--- rettangolo graph.FillRectangle(new SolidBrush(Color.White), 10, 10, 70, 30); //--- ci scrivo dentro graph.DrawString("Matteo", new Font("Tahoma", 12f), new SolidBrush(Color.Red), 15, 15); bmp.Save("c:\\img.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

oppiure se vuoi darla in output diretto su asp.net (quindi magari metterla come "src" di un tag "img"):

bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

0v3rCl0ck Profilo | Guru

Ciao

Per disegnare linee, poligoni, ecc.., in ASP.NET potresti utilizzare delle semplici tabelle HTML (generate magari lato codice utilizzando le asp:table) con colonne e righe spesse 1px (o di più in base a quanto grandi vuoi le linee)

Ecco un esempio per disegnare un quadrato 100x100px:

<html> <head> <title>Test</title> <style> .Angolo { width:1px; height:1px; background-color:black; } .LatoSupInf { width:98px; height:1px; background-color:black; } .LatoDxSx { width=1px; height:98px; background-color:black; } </style> </head> <body> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td class="Angolo"></td> <td class="LatoSupInf"></td> <td class="Angolo"></td> </tr> <tr> <td class="LatoDxSx"></td> <td></td> <td class="LatoDxSx"></td> </tr> <tr> <td class="Angolo"></td> <td class="LatoSupInf"></td> <td class="Angolo"></td> </tr> </table> </body>

Spero di esserti stato di aiuto

Enjoy It
- Michael -
http://blogs.dotnethell.it/Regulator/

0v3rCl0ck Profilo | Guru

Sono d'accordo anche con freeteo (devo dire una soluzione più da programmazione .NET), però la scelta dipende da quanto complesse le tue "linee" devono essere, ma se devi davvero fare delle cose un pochino complesse sicuramente è meglio generarti un bitmap (jpeg) con l'esempio di freeteo.


- Michael -
http://blogs.dotnethell.it/Regulator/

freeteo Profilo | Guru

ciao Michael,
si beh avevo inteso che dovesse far dei "disegni" altrimenti si, hai ragione, si lavora con css, e allora il messaggio sarebbe da spostare nella stanza "HTML,CSS"

il mio dubbio pero' nasceva da quel "etc..." che ha messo...perche' finche' sono righe e rettangoli ok, ma quando devi fare "curve" siamo gia' messi male con css...devi farti le gif con le curve...insomma sicuramente una difficolta' inutile...a parte che con HTML5 avevo sentito si stava lavorando a qualcosa come i gradienti etc...mah speriamo si rinnovino 1po anche questi linguaggi...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

0v3rCl0ck Profilo | Guru

Si si, hai ragione, se deve fare delle curve, con HTML e CSS è un dramma, si fanno tranquillamente, ma è appunto, come dici tu, una complicazione assolutamente inutile


- Michael -
http://blogs.dotnethell.it/Regulator/

illusione Profilo | Junior Member

Ciao
ho provato e questi sono i risultati:

sul file l'immagine viene salvata;

sul video (quello che voglio io) utilizzando
bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
mi viene visualizzato solo il rettangolo ma non vedo piu niente della mia pagina.

io ho un campo label prezzo nella mia pagina e voglio mettere una X per tagliare il prezzo.

Ciao e grazie

freeteo Profilo | Guru

>io ho un campo label prezzo nella mia pagina e voglio mettere
>una X per tagliare il prezzo.
non ho capito cosa intendi qui....ma vuoi visualizzare un'immagine di fianco ad un testo in html?

<asp:Label... /> <img src=".../immagine.xxx" runat="server" />
è questo che stai bisogno di fare?

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

illusione Profilo | Junior Member

Vorrei inserire delle X a tutti prezzi che vedi in rosso in questa pagina.

http://www.vogliadileggere.com/Home_Page.aspx

Il codice che mi hai dato va bene perche il rettangolo lo disegna ma non vedo piu tutti i controlli della mia pagina.

Grazie

freeteo Profilo | Guru

ok, adesso penso di aver capito cosa devi fare.
Devi farti un gestore della richiesta http, in gerco un "HttpHandler" (file con estensione "ashx", ovvero TastDX-Add Item->Generic Handler ) e mettere un tag "img" della pagina che chiama quel gestore.
Questo Handler, ritorna l'immagine disegnata al volo come avevamo fatto prima

Ti posto il codice:

http Handler nome "ImageHandler.ashx",
<%@ WebHandler Language="C#" Class="ImageHandler" %> using System; using System.Web; using System.Drawing; public class ImageHandler : IHttpHandler { public void ProcessRequest (HttpContext context) { Bitmap bmp = new Bitmap(100, 100); Graphics graph = Graphics.FromImage(bmp); //--- rettangolo graph.FillRectangle(new SolidBrush(Color.White), 10, 10, 70, 30); //--- ci scrivo dentro graph.DrawString(context.Request.QueryString["prezzo"], new Font("Tahoma", 12f), new SolidBrush(Color.Red), 15, 15); context.Response.ContentType = "image/jpeg"; bmp.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); } public bool IsReusable { get { return false; } } }


pagina asp.net :
<form id="form1" runat="server"> <img src="ImageHandler.ashx?prezzo=10" /> <img src="ImageHandler.ashx?prezzo=20" /> <img src="ImageHandler.ashx?prezzo=30" /> </form>


come vedi la chiamata passa il parametro "prezzo" (ImageHandler.ashx?prezzo=xxx) che poi dentro all'handler vai ad usare come discriminante di cosa disegnare (context.Request.QueryString["prezzo"]) per disegnare quello che ti serve.
Questo è un esempio ovviamente, tu rendilo adatto alla tua situazione...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

0v3rCl0ck Profilo | Guru

Bell'esempio!


- Michael -
http://blogs.dotnethell.it/Regulator/

freeteo Profilo | Guru

grazie!

Usare l'handler delle immagini è la cosa che faccio sempre (tipicamente un copia-incolla del solito file) perche' mi permette di non avere problemi, dentro li, se serve genero una Thumb, oppure controllo i path virtuali etc...insomma tutto quello che mediamente mi porterebbe alla "solita rottura di scatole"
Quello che ho allegato è un utilizzo di System.Drawing, una namespace molto utile...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

0v3rCl0ck Profilo | Guru

Si, l'avevo fatto anche io per generare i Thumbnail con l'apposita classe fornita da .net, così creavo al volo delle immagini ridimensionate Ma l'esempio calza a pennello per tante altre necessità; implementare l'httphandler è davvero comodo in tante circostanze.


- Michael -
http://blogs.dotnethell.it/Regulator/

freeteo Profilo | Guru

si guarda, gli httpHandler sono veramente potenti, ti permettono di gestirti tutto quello che ti serve su una chiamata http, e poi puoi configurarti il loro "aggancio" tramite web.config a solo alcune estensioni...insomma se hai bisogno di fare cose sofisticate sono veramente comodi.
E poi non trascuriamo che sono piu' leggeri di pagine etc...quindi ovvio, non per tutto, ma per tante altre cose "di servizio" sono la scelta migliore.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

illusione Profilo | Junior Member

Grazie tante per gli input..!

Ciao

0v3rCl0ck Profilo | Guru

Prego

- Michael -
http://blogs.dotnethell.it/Regulator/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5