Newsgroup: it.comp.lang.visual-basic
Titolo: Dimensioni delle jpg

Ciao,
mo potreste spiegare come fare per memorizzare in due variabili altezza e
larghezza di un immagine jpg?
Ho già guardato sul sito del ng e ho fatto una ricerca con Google, ma non ho
trovato niente a riguardo.
Grazie per l'aiuto.
Ciao, Stefano.
--
~~~~~~~~~~~~~~~~~~~~~~~~~
   Per rispondere in E-Mail togli AT.

 Ciao, Stefano.
carica l'immagine in un image con bordo=0 e dividi w e h per i twips.


Dovrei avere le dimensioni prima che l'immagine sia visualizzata.
Hai presente come fa' Win 2000 quando guardi le proprietą dell'immagine?
Vorrei le dimensioni analizzando il file chiuso.
Spero di essere stato chiaro.
Grazie e ciao,
Stefano.

 Stefano.
1. image nascosto. per la mia esperienza, resta piuttosto veloce anche
con jpeg grossetti.
2. specifiche del jpeg: 
http://www.jpeg.org/
 e forse 
www.wotsit.org
ciao, j.
--
www.sundaysw.com

 larghezza di un immagine jpg?
---------------------------START CODE -----------------------------------
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
------------------------------------ END
CODE ---------------------------------------
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...
Ti consiglio di dare un'occhiata a questo sito in cui vengono raccolte tutte
le specifiche dei formati dei file
http://www.wotsit.org/
ciao!

Grazie a tutti.
Ciao, Stefano.

 height=modclass.height
 Ho inserito questo codice: e' giusto?
modclass.FileName.Percorso
modclass.GetImageFileInfo
Height = modclass.Height
Width = modclass.Width
dove Percorso e' il path del file.
Alla prima riga il debug mi dice che manca l'oggetto.
Dove sbaglio?
Grazie e ciao,
Stefano.

 .....e cosi via...
scusa ma non funziona neanche me, ne' in un cls ne' in un bas.
cosa devo fare ?
volevo provare un po' di tempi con codice simile.
senza controlli dovrebbe essere piu' veloce, ma su .filename dice
comunque variabile non definita.
sotto il codice, il risultato via image. con il controllo visibile non
cambia granche'. cambierebbe invece con un doevents.
sfile e' una stringa pubblica, path + file1.filename.
grazie, j.
Private Sub cmdCode_Click()
    If fCount < 1 Then Exit Sub
    Dim w As Long, h As Long
    w = 1: h = 2
    time1 = Timer
    With Text1
        For j = 1 To fCount
            File1.ListIndex = j - 1
            clsImage.FileName = sFile
            w = clsImage.Width
            h = clsImage.Height
'            basImage.FileName = sFile
'            w = basImage.Width
'            h = basImage.Height
            .Text = .Text & vbCrLf & sFile & _
                " - w: " & w & " - h: " & h
        Next
        .Text = .Text & vbCrLf & Format(Timer - time1, "##0.000")
        .SelStart = Len(Text1)
    End With
End Sub
Private Sub cmdImage_Click()
    If fCount < 1 Then Exit Sub
    LockWindowUpdate File1.hwnd
    Image1.Visible = chkVisible
    Dim w As Long, h As Long
    time1 = Timer
    With Text1
        .Text = .Text & vbCrLf & vbCrLf & "Visible: " & _
            IIf(Image1.Visible, "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
    LockWindowUpdate 0
End Sub
Visible: no
1. C:\___\_____\sld001.jpg - w: 320 - h: 240
2. C:\___\_____\sld002.jpg - w: 320 - h: 239
...
63. C:\___\_____\sld063.jpg - w: 320 - h: 240
64. C:\___\_____\sld064.jpg - w: 320 - h: 240
1,742

 cosa devo fare ?
boh! a me funziona, riposto tutto sia chiamate che modulo... fatemi sapere
perň!
-------------------------FORM1------------------------------
    cmdExit       commandbutton
    dir1             dirlistbox
    drive1          drivelistbox
    file1             filelistbox
    txtshowinfo  textbox
-------------------------STARTCODE-------------------------
Private Sub cmdExit_Click()
    End
End Sub
Private Sub Dir1_Change()
    File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
    On Error GoTo ErrorSnap
    Dir1.Path = Drive1.Drive
    Exit Sub
ErrorSnap:
    MsgBox "Drive " & Drive1.Drive & " Periferica non pronta! "
    Drive1.Drive = "C:\"
End Sub
Private Sub File1_Click()
    Dim cType As cGetInfo
    Dim strTemp As String
    Dim strType As String
    strTemp = "DESCRIZIONE DI [" & File1.FileName & "] :" & vbCrLf &
String(50, "-") & vbCrLf
    Set cType = New cGetInfo
    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
        txtShowInfo.ForeColor = vbBlue
        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
        txtShowInfo.ForeColor = vbRed
        strTemp = strTemp & " Formato sconosciuto "
    End If
    txtShowInfo.Text = strTemp
End Sub
---------------------------------ENDCODE------------------------------------
--
---------------------------cGetInfo.cls---STARTCODE-------------------------
-
Option Explicit
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
    TypeOfImage = PNG
        Select Case arrTemp(25)
            Case 0
                Depth = arrTemp(24)
            Case 2
                Depth = arrTemp(24) * 3
            Case 3
                Depth = 8
            Case 4
                Depth = arrTemp(24) * 2
            Case 6
                Depth = arrTemp(24) * 4
            Case Else
                TypeOfImage = UNKNOWN
        End Select
        If TypeOfImage Then
            Width = arrTemp(19) + arrTemp(18) * 256
            Height = arrTemp(23) + arrTemp(22) * 256
        End If
    End If
    If arrTemp(0) = 71 And arrTemp(1) = 73 And arrTemp(2) = 70 Then
        TypeOfImage = GIF
        Width = arrTemp(6) + arrTemp(7) * 256
        Height = arrTemp(8) + arrTemp(9) * 256
        Depth = (arrTemp(10) And 7) + 1
    End If
    If arrTemp(0) = 66 And arrTemp(1) = 77 Then
        TypeOfImage = BMP
        Width = arrTemp(18) + arrTemp(19) * 256
        Height = arrTemp(22) + arrTemp(23) * 256
        Depth = arrTemp(28)
    End If
    If TypeOfImage = UNKNOWN Then
        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
                    Exit Do
            End Select
            lngStep = lngStep + (arrTemp(lngStep + 2) + arrTemp(lngStep + 1)
* 256)
            If lngStep >= BufferSize - 10 Then Exit Sub
        Loop
        TypeOfImage = JPEG
        Height = arrTemp(lngStep + 5) + arrTemp(lngStep + 4) * 256
        Width = arrTemp(lngStep + 7) + arrTemp(lngStep + 6) * 256
        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
--------------------------------ENDCODE------------------------
Spero funzioni perchč non ho tralasciato nulla....

 ha scritto
grazie mille, cosi' funziona e va che e' una bellezza.
qui sotto il timing dei due sistemi in un ciclo.
ciao, a.
VIA IMAGE
Visible: no
Lock: no
1. C:\img\natura\485075.jpg - w: 513 - h: 337
2. C:\img\natura\agpix_mipi14_0741_lg.jpg - w: 350 - h: 247
3. C:\img\natura\b04a0055.jpg - w: 640 - h: 480
4. C:\img\natura\civet.jpg - w: 470 - h: 275
5. C:\img\natura\duck_.jpg - w: 650 - h: 490
6. C:\img\natura\ftogride001.jpg - w: 800 - h: 608
7. C:\img\natura\giant panda2023.jpg - w: 857 - h: 594
8. C:\img\natura\goat3041a.jpg - w: 450 - h: 600
9. C:\img\natura\goat320.jpg - w: 783 - h: 601
10. C:\img\natura\h05k0037.jpg - w: 640 - h: 480
11. C:\img\natura\jaguar04.jpg - w: 1561 - h: 1162
12. C:\img\natura\jaguar-huntinginriver.jpg - w: 898 - h: 1214
13. C:\img\natura\jaguar-kitten.jpg - w: 1421 - h: 1158
14. C:\img\natura\jaguar-snarl.jpg - w: 943 - h: 1192
15. C:\img\natura\leopard03.jpg - w: 1256 - h: 636
16. C:\img\natura\lion_roar.jpg - w: 1152 - h: 900
17. C:\img\natura\marbled salamanderscan2900.jpg - w: 783 - h: 599
18. C:\img\natura\mt_animal_215.jpg - w: 670 - h: 592
19. C:\img\natura\numbat.jpg - w: 354 - h: 390
20. C:\img\natura\penguins_.jpg - w: 650 - h: 490
21. C:\img\natura\possum.jpg - w: 284 - h: 418
22. C:\img\natura\pygmypossum.jpg - w: 350 - h: 438
23. C:\img\natura\seal_.jpg - w: 650 - h: 490
24. C:\img\natura\serval_2.jpg - w: 695 - h: 1024
25. C:\img\natura\swan.jpg - w: 480 - h: 640
26. C:\img\natura\tigercub032.jpg - w: 780 - h: 770
27. C:\img\natura\veryclose.jpg - w: 800 - h: 600
28. C:\img\natura\zoo_komodo_dragon_07.jpg - w: 1262 - h: 784
29. C:\img\natura\zoo_komodo_dragon_10.jpg - w: 1392 - h: 489
4,016
VIA CODE
Lock: no
1. C:\img\natura\485075.jpg - w: 513 - h: 337
2. C:\img\natura\agpix_mipi14_0741_lg.jpg - w: 350 - h: 247
3. C:\img\natura\b04a0055.jpg - w: 640 - h: 480
4. C:\img\natura\civet.jpg - w: 470 - h: 275
5. C:\img\natura\duck_.jpg - w: 650 - h: 490
6. C:\img\natura\ftogride001.jpg - w: 800 - h: 608
7. C:\img\natura\giant panda2023.jpg - w: 857 - h: 594
8. C:\img\natura\goat3041a.jpg - w: 450 - h: 600
9. C:\img\natura\goat320.jpg - w: 783 - h: 601
10. C:\img\natura\h05k0037.jpg - w: 640 - h: 480
11. C:\img\natura\jaguar04.jpg - w: 1561 - h: 1162
12. C:\img\natura\jaguar-huntinginriver.jpg - w: 898 - h: 1214
13. C:\img\natura\jaguar-kitten.jpg - w: 1421 - h: 1158
14. C:\img\natura\jaguar-snarl.jpg - w: 943 - h: 1192
15. C:\img\natura\leopard03.jpg - w: 1256 - h: 636
16. C:\img\natura\lion_roar.jpg - w: 1152 - h: 900
17. C:\img\natura\marbled salamanderscan2900.jpg - w: 783 - h: 599
18. C:\img\natura\mt_animal_215.jpg - w: 670 - h: 592
19. C:\img\natura\numbat.jpg - w: 354 - h: 390
20. C:\img\natura\penguins_.jpg - w: 650 - h: 490
21. C:\img\natura\possum.jpg - w: 284 - h: 418
22. C:\img\natura\pygmypossum.jpg - w: 350 - h: 438
23. C:\img\natura\seal_.jpg - w: 650 - h: 490
24. C:\img\natura\serval_2.jpg - w: 695 - h: 1024
25. C:\img\natura\swan.jpg - w: 480 - h: 640
26. C:\img\natura\tigercub032.jpg - w: 780 - h: 770
27. C:\img\natura\veryclose.jpg - w: 800 - h: 600
28. C:\img\natura\zoo_komodo_dragon_07.jpg - w: 1262 - h: 784
29. C:\img\natura\zoo_komodo_dragon_10.jpg - w: 1392 - h: 489
0,059

 boh! a me funziona, riposto tutto sia chiamate che >modulo... fatemi
sapere
--[mega cut]--
Ora funziona.
Grazie e' proprio quello che cercavo.
Ciao, Stefano.