Italia
Include

Bildgrößen aus Bilddatei Include

 
Tolle Include von Dieter Zornow, um Bildausmasse von Bildern aus File zu laden, ohne die Bilder vollständig einladen zu müssen.

Dieter Zornow, URL=www.rgh-soft.de/forum01/read.php?f=7&i=14767&t=14756, Zeitpunkt=05.03.2010
2010 Autor Dieter Zornow
Teile des Codes basieren auf dem Verfahren aus der Include von Thomas Hölzer, Andreas Miethe, Hans-Jürgen Trog
Freeware
DEF MakeWord(2) (%(1) | (%(2)*$100))

Proc picturetype

    parameters file$
    declare mem#
    dim mem#,50
    Set("Filemode", 0)
    blockread(file$,mem#,0,50)
    Set("Filemode", 2)
    var typ$ = char$(mem#,0,50)
    dispose mem#

    if Left$(typ$,2) = "BM"

        ifnot mid$(typ$,3,2) = chr$(142)+chr$(3)

            return ".bmp"

        else

            return ".rle"

        endif

    elseif left$(typ$,2) = "II"

        return ".tif"

    endif

    typ$= upper$(typ$)

    If instr("JFIF",typ$)

        return ".jpg"

    elseif instr("PNG",typ$)

        return ".png"

    elseif instr("GIF",typ$)

        return ".gif"

    elseif instr("EMF",typ$)

        return ".emf"

    else

        return ".ico"

    endif

endproc

PROC IconDim

    Parameters file$
    Declare Icons&,size#,return$
    Dim size#,filesize(file$)
    var x% = 0
    Set("Filemode", 0)
    BlockRead(file$,Size#,0,filesize(file$))
    Set("Filemode", 2)
    Icons& = @Word(Size#,4)

    if icons& = 1

        return$ = str$(icons&)+"|"+str$(Byte(size#,6))+"|"+str$(Byte(size#,7))

    else

        return$ = str$(icons&)+"|"

        WHILENOT x% = Icons&

            return$ = return$+str$(Byte(size#,6+(x%*16)))+"|"+str$(Byte(size#,6+(x%*16+1)))+"|"
            inc x%

        EndWhile

    endif

    DISPOSE Size#
    case right$(return$,1) = "|":return$ = left$(return$,len(return$)-1)
    return return$

EndProc

Proc GifDim

    parameters file$
    declare mem#
    dim mem#,10
    Set("Filemode", 0)
    blockread(file$,mem#,0,10)
    Set("Filemode", 0)
    var b% = word(mem#,6)
    var h% = word(mem#,8)
    dispose mem#
    return str$(b%)+"|"+str$(h%)

endproc

PROC BMPRLEDim

    Parameters file$
    declare size#
    DIM size#,24
    Set("Filemode", 0)
    BlockRead(file$,size#,0,24)
    Set("Filemode", 2)
    var return$ = str$(long(size#,18))+"|"+str$(long(size#,22))
    DISPOSE size#
    return return$ B,H

endproc

PROC PNGDim

    Parameters file$
    declare size#,mem#
    Dim size#,24
    set("Filemode",0)
    BlockRead(file$,size#,0,24)
    set("Filemode",2)
    var return$ = str$(makeword(byte(size#,19),byte(size#,18)))+"|"+str$(makeword(byte(size#,23),byte(size#,22)))
    DISPOSE size#,mem#
    return return$

EndProc

PROC JPGDim

    Parameters File$
    declare size#
    Dim size#,filesize(file$)
    Set("Filemode", 0)
    blockread(file$,size#,0,filesize(file$))
    Set("Filemode", 2)
    return GetJPGDIM(size#)

    PROC GetJPGDimension

        Parameters size#,Match%
        var back$ = str$(Makeword(byte(size#,match%+3),byte(size#,match%+2)))  + "|" + str$(Makeword(byte(size#,match%+1),byte(size#,match%)))
        DISPOSE size#
        RETURN back$

    EndProc

    PROC GetJPGMatch

        Parameters size#,x%
        Declare fs%,y%,back$
        fs% = sizeof(size#)

        WHILENOT x% = fs%

            IF ((MakeWord(Byte(size#,x%+1),Byte(size#,x%)) = 65472) | (MakeWord(Byte(size#,x%+1),Byte(size#,x%)) = 65474))

                y%=x%+5 5 bytes dazu
                back$ = GetJPGDimension(size#,y%)  Groessenangaben lesen
                x%=fs%-1

            endif

            inc x%

        EndWhile

        RETURN back$

    EndProc

    PROC GetJPGDIM

        parameters size#
        Declare mem#
        dim mem#,65535
        External("Kernel32","RtlMoveMemory",mem#,size#,65535)
        var aaa% = (Makeword(Byte(mem#,5),Byte(mem#,4))+4)
        DISPOSE mem#
        var back$ = GetJPGMatch(size#,aaa%) Position ab Segmentende suchen
        RETURN back$

    endproc

EndProc

PROC TGADim

    Parameters file$
    declare size#,return$
    DIM size#,16
    Set("Filemode", 0)
    BlockRead(file$,size#,0,16)
    Set("Filemode", 2)
    return$ = str$(Word(size#,12))+"|"+str$(Word(size#,14))
    DISPOSE size#
    return return$

EndProc

PROC EMFDim

    Parameters file$
    declare size#,return$
    DIM size#,24
    Set("Filemode", 0)
    BlockRead(file$,size#,0,24)
    Set("Filemode", 2)
    return$ = str$(Word(size#,16))+"|"+str$(Word(size#,20))
    DISPOSE size#
    return return$

EndProc


 
05.03.2010  
 




E.T.
Das Ermitteln der Dimensione von JPG's stürzt ab- und an mal kommentarlos  ab. Nach längerer Cerca im Proc GetJPGDIM gefunden:
dim mem#,65535
External("Kernel32","RtlMoveMemory",mem#,size#,65535)

ersetzen durch:
dim mem#,sizeof(size#)
External("Kernel32","RtlMoveMemory",mem#,size#,sizeof(size#))

Ist mir so Aufgefallen, als ich Dieter's Code zur Größenermittlung in un Bilder-Slideshow eingebaut habe. Die Slideshow brach immer wieder irgendwo ab, nach der Cambiamento ist diese jetzt mit ~500 Bilder'n durchgelaufen !!

Nur getestet bei JPG's,
Vielleicht hilfts ja jemand ...
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
24.10.2010  
 



Jupp, offenensichtlich ein Fehler.
 
24.10.2010  
 




E.T.
Gefunden: Fehler bei Typ- / Größenerkennung bei .jpg  .
Hab das Problem, das einige .jpg-Datei'n nicht als solche erkannt werden (meist Handy-Bilder). Bei diesen Bildern wird überhaupt kein Typ erkannt (es wird ein völlig sinnfreier String zurück gegeben), das Auslesen der Dimensione (als .jpg, bin mir sicher, das es solche sind) scheitert dann auch (Dimensione 0x0 oder oft 160x120 bei 2048x1536).
Die Datei'n sind m.M. i.O., d.h. die exif-Daten (Irfan & Co) wie auch der Windoof-Explorer zeigen die korrekten Werte per File-Format & -Dimensione an.

Also doch mal hinsetzen und mit den exif-Daten beschäftigen,
da diese Daten doch zuverlässiger zu sein scheinen...

[OFFTOPIC]Genau das wollte ich mir mit Dieter's Include sparen... , dieses exif-Gewirr zu "entwirren". Naja, vielleich wirds ja 'ne dll per exif-Daten...[/OFFTOPIC]
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
11.12.2010  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

11.393 Views

Untitledvor 0 min.
Michael Hettner02.05.2022
Daniel04.03.2022
Ralf Netz22.05.2021
Sven Bader04.03.2021
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

E.T. (2x)
iF (2x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie