Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Da System.Drawing.Image a Controllo Immagine

    Ciao, ho un oggetto che mi restituisce una bitmap di tipo system.drawing.image e io la devo passare a un controllo web per visualizzare l'immagine (es. asp:Image).

    Ora i controlli web necessitano di avere un src o ImageUrl cioè di un file fisico a cui fare riferimento.
    Leggendo in giro ho trovato che l'unica soluzione sono gli httphandler.
    ho fatto un file ashx

    codice:
    <%@ WebHandler Language="VB" Class="imgHandler" %>
    Imports System
    Imports System.Web
    Imports System.IO
    
    Public Class imgHandler : Implements IHttpHandler
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
        
        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
     ....
    ...
    context.Response.ContentType = "image/jpeg"
    context.Response.BinaryWrite(imageContent)
    end sub
    l'ho salvato nella App_Code


    poi nel code behind della mia pagina aspx chiamo
    Image1.ImageUrl = "ImageHandler.ashx?sessionID=" & Session.SessionID & "&sz=1"
    (la querystring mi servirà in futuro ora ho un'immagine sempre quella restituita per test)

    da quello che ho capito così dovrebbe funzionare in quanto riconoscerebbe ImageHandler.ashx come handler e ne chiamerebbe la ProcessRequest

    il mio problema è che non lo riconosce affatto e cerca di caricare il percorso dell'immagine così come è scritto.

    nel webconfig ho anche aggiunto agli <httpHandlers>
    <add path="imgHandler.ashx" type="imgHandler" verb="*" validate="false" />


    qualcuno può/sa aiutarmi?
    Grazie mille
    ::Scegli se sarai Rullo o la Strada ::

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non è necessario avere un file fisico. Basta avere il documento in memoria (immagine, pdf ...) e non è necessario neanche avere un httphandler. E non è necessario avere neanche un controllo server image

    Guarda l'esempio

    codice:
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        Protected Sub Page_Load(sender As Object, e As System.EventArgs)
            Dim immagine As String = RequestParams("immagine")
            If immagine = "1" Then
                ReturnImage()
            End If
        End Sub
        
        Private Sub ReturnImage()
            Dim redPen As New Pen(Color.Red, 3)
            Dim brush As New System.Drawing.Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Color.Red, Color.Yellow)
            'Dim curBitmap As New Bitmap(200, 200)
            Dim curBitmap As Bitmap = libreria.ImgCreateBitmap(200, 200)
            'Dim g As Graphics = Graphics.FromImage(curBitmap)
            Dim g As Graphics = libreria.ImgCreateGraphics(curBitmap)
            g.FillRectangle(brush, 50, 50, 100, 100)
            g.DrawLine(Pens.WhiteSmoke, 10, 10, 180, 10)
            g.DrawLine(Pens.White, 10, 10, 10, 180)
    
            
    
            Response.ContentType = "image/gif"
            curBitmap.Save(Response.OutputStream, Imaging.ImageFormat.Gif)
    
            curBitmap.Dispose()
            g.Dispose()
            brush.Dispose()
            redPen.Dispose()
    
            Response.End()
    
        End Sub
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function Button1_onclick() 
    {
        var v = document.getElementById("img1");
        v.style.display = "";
        v.src = "?immagine=1";
    }
    
    // ]]>
    </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <input id="Button1" type="button" value="Visualizza immagine" onclick="return Button1_onclick()" />
            <hr />
            [img][/img]
        </div>
        </form>
    </body>
    </html>
    Pietro

  3. #3
    Grazie Mille Pietro!!
    ::Scegli se sarai Rullo o la Strada ::

  4. #4
    scusami, mi rendo conto che la domanda è stupida ma non capisco...
    se volessi usare un file di vb, file separato, cosa dovrei mettere al posto di
    v.src = "?immagine=1";
    Grazie
    ::Scegli se sarai Rullo o la Strada ::

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    perchè non mandi un po' di codice così da vedere meglio?
    Pietro

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    questo è un altro esempio

    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="a.aspx.vb" Inherits="prove_a" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <h3>esempio</h3>    
            <asp:PlaceHolder ID="PlaceHolder1" runat="server" EnableViewState="false"></asp:PlaceHolder>
        </div>
        </form>
    </body>
    </html>
    codice:
    Option Strict On
    
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Dim immagine As String = Me.Request.QueryString("immagine")
            If immagine = "1" Then
                ReturnImage()
            End If
    
            Dim img As New WebControls.Image()
            img.ImageUrl = "?immagine=1"
            Me.PlaceHolder1.Controls.Clear()
            Me.PlaceHolder1.Controls.Add(img)
    
    
        End Sub
    
        Private Sub ReturnImage()
            Dim redPen As New Pen(Color.Red, 3)
            Dim brush As New System.Drawing.Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Color.Red, Color.Yellow)
            Dim curBitmap As New Bitmap(200, 200)
            Dim g As Graphics = Graphics.FromImage(curBitmap)
            g.FillRectangle(brush, 50, 50, 100, 100)
            g.DrawLine(Pens.WhiteSmoke, 10, 10, 180, 10)
            g.DrawLine(Pens.White, 10, 10, 10, 180)
    
            Response.ContentType = "image/gif"
            curBitmap.Save(Response.OutputStream, Imaging.ImageFormat.Gif)
    
            curBitmap.Dispose()
            g.Dispose()
            brush.Dispose()
            redPen.Dispose()
    
            Response.End()
    
        End Sub
    
    End Class
    è funzionante
    Pietro

  7. #7
    ciao, mi permetto di commentare la soluzione di Pietro.

    È vero che funziona, ma è un accrocchio!!!
    Richiamare la pagina (se stessa), quindi rifare il PageLifeCycle con tutto l'annesso e connesso (Moduli, PageFactory e Handler).

    Per questo tipo di esigenze ci sono appunto gli Handler, che tra l'altro il codice è quasi identico. In questo modo si soddisfa anche la domanda
    "se volessi usare un file di vb, file separato?"

    Ciao

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    che ci posso fare? Ho usato un vecchissimo codice di Francesco Balena
    Pietro

  9. #9
    a be...... se è di Francesco Balena....
    chiedo umilmente perdono al
    sommo
    supremo
    superevengelist
    figlio di VB sceso in terra e reincarnato in umano



    scherzi a parte, forse era per asp.net 1.1
    Ora essendoci gli Handler programmabili, meglio usare quelli.

    ciao

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    sommo
    supremo
    superevengelist
    figlio di VB sceso in terra e reincarnato in umano
    su questo non ci sono dubbi (almeno per i vecchi come me )

    ciao
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.