Newsgroup: it.comp.lang.visual-basic
Titolo: Dimensioni di una immagine

Al volo perchč vado di corsa. C'č una qualche api
che ti restituisce le dimensioni di una immagine jpg e
gif. Qualche esempio.
Scusate, ma sto andando di corsa e non ho tempo
di cercare.
--
Saluti
Andrea Moro

 gif. Qualche esempio.
Dim pic as StdPicture
Set pic= LoadPicture(...)
x = FormOPictureBox.ScaleX(pic.Picture.Width, vbFromHimetrics, vbPixels)
Ciao

Thanks.
--
Saluti
Andrea Moro

[Andrea Moro] scrisse:

metodo standard: caricarla in una image con autosize a true.
--
Salutoni
Sergio


'Newsgroups: it.comp.lang.visual -basic
'Sent: Monday, September 16, 2002 11:59 PM
'Subject: Re: Dimensioni delle jpg
'Utilizzalo come modulo di classe...
'modclass.FileName= ->gli passi il path del file
'modclass.GetImageFileInfo  'ricava le info del file
'Height = modclass.Height
'.....e cosi via...
Public FileName As String
Public Width As Long
Public Height As Long
Public Depth As Long
Public TypeOfImage As eType
Private Const BufferSize As Long = 65535
Public Enum eType
    UNKNOWN = 0
    GIF = 1
    JPEG = 2
    PNG = 3
    BMP = 4
End Enum
Public Sub GetImageFileInfo()
    On Error GoTo ErrorSnap
    Dim arrTemp(BufferSize) As Byte
    Dim FileNumber As Integer
    FileNumber = FreeFile()
    Open FileName For Binary As FileNumber
    Get #FileNumber, 1, arrTemp()
    Close FileNumber
    If arrTemp(0) = 137 And arrTemp(1) = 80 And arrTemp(2) = 78 Then
    ' inizio con il PNG
    TypeOfImage = PNG
    ' controllo la profondita'
        Select Case arrTemp(25)
            Case 0
            ' scala di grigi
                Depth = arrTemp(24)
            Case 2
            ' RGB encoded
                Depth = arrTemp(24) * 3
            Case 3
            ' 8 bpp
                Depth = 8
            Case 4
            ' scalagrigi con alpha
                Depth = arrTemp(24) * 2
            Case 6
            ' RGB encoded con alpha
                Depth = arrTemp(24) * 4
            Case Else
                TypeOfImage = UNKNOWN
        End Select
        If TypeOfImage Then
            ' LARGHEZZA
            Width = arrTemp(19) + arrTemp(18) * 256
            ' ALTEZZA
            Height = arrTemp(23) + arrTemp(22) * 256
        End If
    End If
    If arrTemp(0) = 71 And arrTemp(1) = 73 And arrTemp(2) = 70 Then
    ' -------------  GIF -------------------------
        TypeOfImage = GIF
        ' LARGHEZZA
        Width = arrTemp(6) + arrTemp(7) * 256
        ' ALTEZZA
        Height = arrTemp(8) + arrTemp(9) * 256
        ' PROFONDITA'
        Depth = (arrTemp(10) And 7) + 1
    End If
    If arrTemp(0) = 66 And arrTemp(1) = 77 Then
    ' -------------------  BMP -----------------------------
        TypeOfImage = BMP
        ' LARGHEZZA
        Width = arrTemp(18) + arrTemp(19) * 256
       ' ALTEZZA
        Height = arrTemp(22) + arrTemp(23) * 256
        'PROFONDITA'
        Depth = arrTemp(28)
    End If
    If TypeOfImage = UNKNOWN Then
        '  controlla se e' una JPEG
        Dim lngStep As Long
        Do
            If (arrTemp(lngStep) = &HFF And arrTemp(lngStep + 1) = &HD8 _
                And arrTemp(lngStep + 2) = &HFF) Or (lngStep >= BufferSize -
10) _
                Then Exit Do
            lngStep = lngStep + 1
        Loop
        lngStep = lngStep + 2
        If lngStep >= BufferSize - 10 Then Exit Sub
        Do
            Do
                If arrTemp(lngStep) = &HFF And arrTemp(lngStep + 1) <> &HFF
_
                    Then Exit Do
                lngStep = lngStep + 1
                If lngStep >= BufferSize - 10 Then Exit Sub
            Loop
            lngStep = lngStep + 1
            Select Case arrTemp(lngStep)
                Case &HC0 To &HC3, &HC5 To &HC7, &HC9 To &HCB, &HCD To &HCF
                ' ok
                    Exit Do
            End Select
            lngStep = lngStep + (arrTemp(lngStep + 2) + arrTemp(lngStep + 1)
* 256)
            If lngStep >= BufferSize - 10 Then Exit Sub
        Loop
        TypeOfImage = JPEG
'-------------------------------------------------
        ' ALTEZZA
        Height = arrTemp(lngStep + 5) + arrTemp(lngStep + 4) * 256
        ' LARGHEZZA
        Width = arrTemp(lngStep + 7) + arrTemp(lngStep + 6) * 256
        ' PROFONDITA'
        Depth = arrTemp(lngStep + 8) * 8
    End If
    Exit Sub
ErrorSnap:
    MsgBox " Errore: " & Err.Description
End Sub
Private Sub Class_Initialize()
    Height = 0
    Width = 0
    Depth = 0
    TypeOfImage = UNKNOWN
End Sub
'form1
Private Sub cmdCode_Click()
    If fCount < 1 Then Exit Sub
    Dim cType As clsGetInfo
    time1 = Timer
    Text1.Text = Text1.Text & vbCrLf & vbCrLf & "VIA CODE"
    Text1.Text = Text1.Text & vbCrLf & "Lock: " & _
            IIf(chkLock.Value = 1, "si'", "no")
    For j = 1 To fCount
        File1.ListIndex = j - 1
        Set cType = New clsGetInfo
        With cType
            .FileName = sFile
            .GetImageFileInfo
            If .TypeOfImage = UNKNOWN Then
                .Width = 0
                .Height = 0
            End If
            Text1.Text = Text1.Text & vbCrLf & j & ". " & .FileName & _
                " - w: " & .Width & " - h: " & .Height
        End With
    Next
    Text1.Text = Text1.Text & vbCrLf & Format(Timer - time1, "##0.000")
    Text1.SelStart = Len(Text1)
    Set cType = Nothing
End Sub
Private Sub cmdDesc_Click()
    Dim cType As clsGetInfo
    Dim strTemp As String
    Dim strType As String
    strTemp = "DESCRIZIONE DI [" & File1.FileName & "] :" & _
        vbCrLf & String(50, "-") & vbCrLf
    Set cType = New clsGetInfo
    If Right(Dir1.Path, 1) = "\" Then
        cType.FileName = Dir1.Path & File1.FileName
    Else
        cType.FileName = Dir1.Path & "\" & File1.FileName
    End If
    cType.GetImageFileInfo
    If cType.TypeOfImage <> UNKNOWN Then
        strType = IIf(cType.TypeOfImage = 1, "GIF", _
            IIf(cType.TypeOfImage = JPEG, "JPEG", _
            IIf(cType.TypeOfImage = 3, "PNG", "BMP")))
        strTemp = strTemp & " File type is : " & strType & vbCrLf
        strTemp = strTemp & " Height : " & cType.Height & vbCrLf
        strTemp = strTemp & " Width : " & cType.Width & vbCrLf
        strTemp = strTemp & " Depth : " & cType.Depth & vbCrLf
    Else
        strTemp = strTemp & " Formato sconosciuto "
    End If
    Text1.Text = strTemp
End Sub
Private Sub cmdImage_Click()
    If fCount < 1 Then Exit Sub
    Image1.Visible = chkVisible
    Dim w As Long, h As Long
    time1 = Timer
    With Text1
        .Text = .Text & vbCrLf & vbCrLf & "VIA IMAGE"
        .Text = .Text & vbCrLf & "Visible: " & _
            IIf(Image1.Visible, "si'", "no")
        .Text = .Text & vbCrLf & "Lock: " & _
            IIf(chkLock.Value = 1, "si'", "no")
        For j = 1 To fCount
            File1.ListIndex = j - 1
            With Image1
                .Picture = LoadPicture(sFile)
                w = .Width / tX
                h = .Height / tY
            End With
            .Text = .Text & vbCrLf & j & ". " & sFile & _
                " - w: " & w & " - h: " & h
        Next
        .Text = .Text & vbCrLf & Format(Timer - time1, "##0.000")
        .SelStart = Len(Text1)
    End With
End Sub
Private Sub File1_Click()
    sFile = sPath & File1.FileName
End Sub

Uao ... giusto due righe di codice :)))
Giusto per curiosità ... che ha di più veloce rispetto
a quanto proposto da zanna che è decisamente più
corto?
--
Saluti
Andrea Moro

corto?
l'esecuzione?
saluti ironici
-- 
Gianni Rondinini
Icem s.r.l.
Tel: 
+39 0545 78036
Fax: 
+39 0545 78727

 ha scritto


 saluti ironici
Non intiendo ... cioè tra le due è chiaro (forse) che meno righe di
codice = maggiore velocità.
Comunque lasciamo perdere ... se non viene fuori una polemica :)
--
Saluti
Andrea Moro

codice = maggiore velocità.
stavo scherzando.
in generale, non e' meno codice = maggiore velocita', bensi'
istruzioni leggere e/o veloci = maggiore velocita'.
incidentalmente, soprattutto in linguaggi ad alto livello come vb,
poche istruzioni ne nascondono in realta' tantissime altre.
nelle poche righe che ti avevano postato, di fatto tu carichi
l'immagine, la associ ad un controllo e dopo vai a leggere le
proprieta' del controllo. questa e' un'operazione apparentemente
semplice da fare --3 istruzioni-- ma molto lenta perche' in realta' e'
molto complessa. a parte il fatto che fai tante cose "inutili", tipo
caricare tutta l'immagine in memoria, inizializzare tutte le
proprieta' di un controllo e cosi' via.
nel post di ap, invece, lui apre il file e legge da disco solo lo
stretto indispensabile per capire quanto sia grande l'immagine. quindi
tu scrivi piu' codice, ma in realta' fai molte meno operazioni e,
soprattutto, fai solo quelle strettamente necessarie allo scopo.
saluti chiarificatori.


 saluti chiarificatori.
Grazie "chiarite" :)
--
Saluti
Andrea Moro

 soprattutto, fai solo quelle strettamente necessarie allo scopo.
ciao