Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Overflow dopo arrotontamento ad intero INT

    Beh questa davvero è bella: prendo paro paro dalle guide della hostingsolution (dove hosta il mio sitozzo) questo codice di esempio, per fare un Resize on server di un'immagine (posso perchè il server ha installate le estensioni ASPIMAGE).

    E qui arriva la sorpresona:

    ------------
    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> ASPImage - Resize test </title>
    </head>
    <body>
    <%
    Set Image = Server.CreateObject("AspImage.Image")
    Image.LoadImage server.MapPath("/") & "/images/grafico.jpg"
    larghezza = Image.MaxX
    altezza = Image.MaxY
    maxaltezza = 100
    maxlarghezza = 200
    rapporto1 = larghezza / maxlarghezza
    rapporto2 = altezza / maxaltezza
    if rapporto1 > rapporto2 then
    rapporto = rapporto1
    else
    rapporto = rapporto2
    end if
    nuovalarghezza = int(larghezza / rapporto) VVoVe: OVERFLOW
    nuovaaltezza = int(altezza / rapporto)
    Image.ResizeR nuovalarghezza,nuovaaltezza
    Image.FileName = server.MapPath("/") & "/images/thumb-grafico.jpg"
    if Image.SaveImage then
    Response.Write "[img][/img]"
    else
    Response.Write "<h2>qualcosa è andato storto</h2>"
    end if
    Set Image = nothing
    %>
    </body>
    </html>
    -----------

    Dai che scherzo è questo??
    Cioè INT() non arrotonda perchè o l'input o il risultato trabocca dalla variabile int che appunto possiede solo 32 bit (almeno credo sia questo l'errore). Allora provo con LONG() (mi pare lavori coi 64 bit) ma niente, overflow pure con quello. Ma come è possibile??


    Qualcuno può illuminarmi???

  2. #2
    prova

    nuovalarghezza = CDBL(larghezza) / CDBL(rapporto)
    nuovalarghezza = CLNG(nuovalarghezza)

  3. #3
    Questo codice è di una pagina a se stante, viene chiamata 2 volte la routine per ridimensionare l'immagine. La prima ridimensiona il file "1.jpg" presente nella cartella "antennistica_centralizzata" con dimensioni massime 600x400, la seconda ridimensiona il file "1.jpg" presente nella cartella "antennistica_centralizzata/preview" con dimensioni massime 90x90. Niente di speciale...

    Funziona perfettamente pergiunta senza i vari CDBL e CLNG, ma con INT()!!!!
    --------------------
    <% option explicit

    sub ImageResize(maxlarghezza,maxaltezza,nome,indirizzo )
    dim Image, larghezza, altezza, rapporto, rapporto1, rapporto2, nuovalarghezza, nuovaaltezza
    Set Image = Server.CreateObject("AspImage.Image")
    Image.LoadImage server.MapPath("/images/foto/" & indirizzo & "/" & nome & ".jpg")
    larghezza = Image.MaxX
    altezza = Image.MaxY
    rapporto1 = larghezza / maxlarghezza
    rapporto2 = altezza / maxaltezza
    if rapporto1 > rapporto2 then
    rapporto = rapporto1
    else
    rapporto = rapporto2
    end if
    nuovalarghezza = int(larghezza / rapporto)
    nuovaaltezza = int(altezza / rapporto)
    Image.ResizeR nuovalarghezza,nuovaaltezza
    Image.FileName = server.MapPath("/images/foto/" & indirizzo & "/" & nome & ".jpg")
    if Image.SaveImage then
    Response.Write("[img][/img]")
    else
    Response.Write("<h2>qualcosa è andato storto</h2>")
    end if
    Set Image = nothing
    end sub

    ImageResize 600,400,1,"antennistica_centralizzata"
    ImageResize 90,90,1,"antennistica_centralizzata/preview"
    ------------------------------------------

    Copiata para para la routine, con le stesse righe di chiamata, all'interno di una pagina asp più grande va in overflow. E se per overflow non intendesse una variabile con input troppo grande, ma magari semplicemente mando in overflow la memoria di 4 mb max per fare i calcoli a pagina??? Credo sia possibile...

    In questo caso dovrei alzare il buffer, ma come si fa??

  4. #4
    Originariamente inviato da Kristian0
    E se per overflow non intendesse una variabile con input troppo grande, ma magari semplicemente mando in overflow la memoria di 4 mb max per fare i calcoli a pagina??? Credo sia possibile...

    In questo caso dovrei alzare il buffer, ma come si fa??
    4mb (ma forse volevi dire 4gb) non sono sufficienti per fare un calcolo? non basta la panda per trasportare un etto di salame?

    overflow in quel caso vuol dire che stai lavorando con valori troppo grandi per quel contenitore.

    posso aver scritto un miliardo di miliardi di volte a=b, e aver sempre funzionato! se per una volta (una!) b è maggiore di 32768 e a è un intero, mi dà overflow. non complichiamoci la vita inutilmente...

  5. #5
    Tutto okay andava in overflow perchè gli passavo male l'indirizzo del file da ridimensionare, le solite noie con gli slash quando usi la server.MapPath().


    Non pensavo che la server.MapPath() andasse in overflow comunque

  6. #6
    Originariamente inviato da Kristian0
    Non pensavo che la server.MapPath() andasse in overflow comunque
    infatti. la server.mappath NON va in overflow - ancora una volta sbagli bersaglio . è che non trovando il file alcuni valori derivati probabilmente restano a zero (meglio, vuoti)

    prova questo codice

    codice:
    <%
    Response.Write "
    larghezza...: " & larghezza 
    Response.Write "
    rapporto...: " & rapporto
    response.flush
    nuovalarghezza = int(larghezza / rapporto) 
    %>
    e rifletti.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.