Lightbox con datalist

lunedì 14 giugno 2010 - 07.13

basicdany Profilo | Expert

ciao ho realizzato un galleria di img e uso lightpbx per visualizzare l'anteprima, :

<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal"
BorderColor="Aqua" RepeatColumns="8">
<ItemTemplate>
&nbsp;&nbsp;&nbsp;

<a href='<%# "ShowImagePerIDImmobile.ashx?Idfoto=" & Eval("Idfoto") %>' rel="lightbox">


<asp:Image ID="Image1" runat="server" ToolTip="clicca perl'anteprima" whith = "200" height = "200"
ImageUrl='<%# "~/ShowImagePerIDImmobile.ashx?Idfoto=" & Eval("Idfoto") %>' />

</a>

<br />
</ItemTemplate>
</asp:DataList>


IL PROBLEMA E CHE LIGHTBOX NON EFFETTUA IL RESIZE DELL'IMMAGINE, INFATTI UN'IMMAGINE ESE DI 1024 * 768 LA VISUALIZZA MOLTO
GRANDE,QUALCUNO SA COME RISOLVERE QUESTO PROBLEMA?


ALTRIMENTI ABBANDONO L'IDEA DI USARE LIGHTBOX , COME POTREI VISUALIZZARE L'IMMAGINE CHE SI CLICCA NEL DATALIST IN UN CONTROLLO IMAGE.

GRAZIE A TUTTI

motogpdesmo16 Profilo | Senior Member

Non è "colpa" del lightbox bensì dell'handler HTTP che utilizzi per caricare l'immagine. L'handler deve restituire già l'immagine ridimensionata secondo quelle che sono le tue esigenze.
Se posso permettermi di dare un consiglio evita, nel thumbnail, di impostare manualmente le dimensioni di larghezza ed altezza ma deve essere sempre l'handler ad effettuare il ridimensionamento onde evitare lo stretch dell'immagine stessa. Ovviamente i parametri di ridimensionamento possono tranquillamente essere passati via querystring e quindi potrai benissimo fare w=XXX&h=XXX (per passare le dimensioni di larghezza (w = width) e altezza (h = height)) oppure, come sono solito fare io, prevedo anche un terzo parametro che mi effettua il ridimensionamento di altezza e larghezza di un dato valore x=XXX (dove x appunto provvede, nell'handler, ad effettuare il ridimensionamento di larghezza e altezza). Su internet trovi davvero molta roba riguardante il prelievo e il ridimensionamento di immagini dal database oppure da un path specifico nella tua applicazione.

basicdany Profilo | Expert

ciao, puoi passarmi tu come fare questo ridimensionamento in modo da evitare questo problema o cosa cercare di preciso su internet, perche' le immagini possono di varie dimensioni e risoluzione, quindi ho davvero bisogno di ridimensionare.

grazie fatemi sapere.

motogpdesmo16 Profilo | Senior Member

Su internet puoi cercare handler ashx per ridimensionamento immagini o qualcosa di simile anche in inglese.
Occhio però all'algoritmo di ridimensionamento: fermo restando che le dimensioni possono essere le più disparate, devi valutare se il ridimensionamento è necessario per il lato lungo, per quello corto o per entrambi in base al parametro o ai parametri di ridimensionamento che vengono passati nella querystring.
Esempio. Se nella Querystring passo w=500&h=300 e la mia immagine è 640x480, allora il ridimensionamento deve avvenire per entrambi i lati mantenendo sempre le proporzioni in termini di lunghezza e altezza (640/480 = 1.33 e quindi anche l'immagine ridimensionata deve avere le proporzioni di 1.33 tra lunghezza e altezza). Stesso discorso se l'immagine è verticale.

basicdany Profilo | Expert

Ciao ma praticamente io uso gia un handler per caricare l'immagine dal db:

<%@ WebHandler Language="vb" Class="ShowImage" %>

Imports System
Imports System.Configuration
Imports System.Web
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient

Public Class ShowImage
Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

Try
Dim empno As Int32
If Not context.Request.QueryString("id") Is Nothing Then
empno = Convert.ToInt32(context.Request.QueryString("id"))
Else
Throw New ArgumentException("No parameter specified")
End If

context.Response.ContentType = "image/jpeg"
Dim strm As Stream = ShowEmpImage(empno)
Dim buffer As Byte() = New Byte(4095) {}
Dim byteSeq As Integer = strm.Read(buffer, 0, 4096)

Do While byteSeq > 0
context.Response.OutputStream.Write(buffer, 0, byteSeq)
byteSeq = strm.Read(buffer, 0, 4096)
Loop
'context.Response.BinaryWrite(buffer);

Catch
End Try

End Sub

Public Function ShowEmpImage(ByVal idfoto As Integer) As Stream
Dim conn As String = ConfigurationManager.ConnectionStrings("GPIConnectionString").ConnectionString
Dim connection As SqlConnection = New SqlConnection(conn)
Dim sql As String = "SELECT foto FROM foto WHERE idfoto = @ID"
Dim cmd As SqlCommand = New SqlCommand(sql, connection)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@ID", idfoto)
connection.Open()
Dim img As Object = cmd.ExecuteScalar()
Try
Return New MemoryStream(CType(img, Byte()))
Catch
Return Nothing
Finally
connection.Close()
End Try
End Function

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property


End Class

Sono poco pratico di aps.net,non capisco cosa devo fare, puoi darmi dire praticamente cosa devo fare per fare il ridimensionamento.

Graize

alexmed Profilo | Guru

Utilizza questa versione di Lightbox che supporta il ridimensionamento automatico:

http://seb.box.re/2006/11/22/lightbox-2-auto-resizing-enhancement

Ciao

alexmed
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-2019
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5