Español
Fuente/ Codesnippets

Auslesen Bitmaps Breitehöhe Gifbmp Gráficos

 

KompilierenMarcaSeparación
Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Bitmaps: Breite und Höhe von Grafiken auslesen (*.gif,*.bmp,*.pcx,*.tga,*.wmf,*.png,*.ico,*.emf,*.jpg)
PRFellow-Vorlage (08/2000)
Autoren:
Dieser Quelltext ist eine Gemeinschaftsarbeit von:
Thomas Hölzer, Andreas Miethe, Hans-Jürgen Trog - Alle Rechte vorbehalten
Breite und Höhe aus Datei lesen für Grafiken folgender Formate:
GIF, PCX, WMF, EMF, BMP, JPG, PNG, TGA, ICO
Der Quelltext und das hier dargelegte Verfahren sind FREEWARE unter der
Bedingung, dass bei Verwendung die Autoren erwähnt werden!
aktualisiert am 15.09.00
Declare size#

PROC GetGIFDimension

    Parameters file$
    DIM size#,4
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,6
    BlockRead(#1,size#,0,4)
    CloseRW #1
    PRINT file$;:
    PRINT Breite:,@Word(size#,0),Höhe:,@Word(size#,2)
    PRINT
    FileMode 2
    DISPOSE size#

EndProc

PROC GetBMPDimension

    Parameters file$
    DIM size#,8
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,18
    BlockRead(#1,size#,0,8)
    CloseRW #1
    PRINT file$;:
    PRINT Breite:,@Word(size#,0),Höhe:,@Word(size#,4)
    PRINT
    FileMode 2
    DISPOSE size#

EndProc

PROC GetPCXDimension

    Parameters file$
    DIM size#,4
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,8
    BlockRead(#1,size#,0,4)
    CloseRW #1
    PRINT file$;:
    PRINT Breite:,Add(@Word(size#,0),1),Höhe:,Add(@Word(size#,2),1)
    PRINT
    FileMode 2
    DISPOSE size#

EndProc

PROC GetTGADimension

    Parameters file$
    DIM size#,4
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,12
    BlockRead(#1,size#,0,4)
    CloseRW #1
    PRINT file$;:
    PRINT Breite:,@Word(size#,0),Höhe:,@Word(size#,2)
    PRINT
    FileMode 2
    DISPOSE size#

EndProc

PROC GetWMFDimension

    Parameters file$
    DIM size#,8
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,10
    BlockRead(#1,size#,0,4)
    CloseRW #1
    FileMode 2
    es kann vorkommen, dass die Größenangaben an anderer Stelle stehen!

    if @Or(@equ(@Word(size#,0),0),@equ(@Word(size#,2),0))

        FileMode 0
        Assign #1,file$
        OpenRW #1
        Seek #1,16
        BlockRead(#1,size#,0,8)
        CloseRW #1
        FileMode 2
        PRINT file$;:
        PRINT Breite:,@Word(size#,0),Höhe:,@Word(size#,4)
        PRINT

    else

        PRINT file$;:
        PRINT Breite:,@Word(size#,0),Höhe:,@Word(size#,2)
        PRINT

    endif

    DISPOSE size#

EndProc

PROC GetPNGDimension

    Parameters file$
    DIM size#,4
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,18
    BlockRead(#1,size#,1,1)
    Seek #1,19
    BlockRead(#1,size#,0,1)
    Seek #1,22
    BlockRead(#1,size#,3,1)
    Seek #1,23
    BlockRead(#1,size#,2,1)
    CloseRW #1
    PRINT file$;:
    PRINT Breite:,@Word(size#,0),Höhe:,@Word(size#,2)
    PRINT
    FileMode 2
    DISPOSE size#

EndProc

PROC GetIconDimension

    Declare Icons&,x%
    Parameters file$
    DIM Size#,16
    FileMode 0
    LET x% = 0
    Assign #1,file$
    OpenRW #1
    Seek #1,4
    wieviele Icons sind im File ?
    BlockRead(#1,Size#,0,2)
    PRINT file$;:,
    PRINT Icons gesamt,@Word(Size#,0)
    Print
    LET Icons& = @Word(Size#,0)

    WHILENOT equ(x%,Icons&)

        zum Einstiegspunkt der einzelnen Icons
        Seek #1,add(6,(mul(x%,16)))
        BlockRead(#1,Size#,0,16)
        PRINT Icon:,str$(add(x%,1)), - ,
        PRINT Breite,@Byte(size#,0),Pixel, - ,
        PRINT Höhe,@Byte(size#,1),Pixel, - ,
        PRINT Farben,@Byte(size#,2)  0 wenn >= 8-BitPerPixel
        PRINT BitPerPixel,@Word(size#,6),  - ,
        Print
        let x%=x%+1

    EndWhile

    CloseRW #1
    FileMode 2
    DISPOSE Size#

EndProc

PROC GetEMFDimension

    Parameters file$
    DIM size#,8
    FileMode 0
    Assign #1,file$
    OpenRW #1
    Seek #1,16
    BlockRead(#1,size#,0,8)
    CloseRW #1
    PRINT file$;:
    PRINT Breite,@Word(size#,0),Höhe,@Word(size#,4)
    PRINT
    FileMode 2
    DISPOSE size#

EndProc

*********************************************
ab hier Groesse von JPG-Files ermitteln
###############################
Declare breite%,höhe%,size1#

PROC GetJPGDimensions

    Parameters File$

    PROC GetJPGDimension

        Groessenangaben auslesen
        ########################
        Declare Back$
        Parameters file$,Match%
        DIM size1#,4
        FileMode 0
        Assign #1,file$
        OpenRW #1
        Seek #1,Match%
        BlockRead(#1,size1#,1,1)
        Seek #1,Match%+1
        BlockRead(#1,size1#,0,1)
        Seek #1,Match%+2
        BlockRead(#1,size1#,3,1)
        Seek #1,Match%+3
        BlockRead(#1,size1#,2,1)
        CloseRW #1
        LET Back$ = add$(str$(@Word(size1#,2))
        ,ADD$(,,str$(@Word(size1#,0))))
        DISPOSE size1#
        FileMode 2
        RETURN back$

    EndProc

    PROC GetJPGMatch

        Segmentmarker fuer Start of Frame-Marker suchen
        5 Bytes danach kann man die Grossenangaben auslesen.
        Start of Frama-Marker ist immer $FFC0 oder $FFC2.
        ###################################################
        DEF MakeWord(2) Or(%(1),Mul(%(2),$100))
        Declare x%,fs%,y%,back$
        Parameters file$,x%
        FileMode 0
        Assign #1,file$
        OpenRW #1
        let fs% = @GetFileSize(#1)
        DIM size#,fs%
        BlockRead(#1,size#,0,fs%)
        CloseRW #1

        WHILENOT equ(x%,fs%)

            IF or(equ(MakeWord(Byte(size#,x%+1),

                Byte(size#,x%)),65472),
                equ(MakeWord(Byte(size#,x%+1),
                Byte(size#,x%)),65474))
                LET y%=x%+5 5 bytes dazu
                GetJPGDimension File$,y%  Groessenangaben lesen
                LET back$=@$(0)
                LET x%=fs%-1

            endif

            let x%=x%+1

        EndWhile

        DISPOSE size#
        let breite%=val(Substr$(@$(0),1,,))
        let höhe%=val(Substr$(@$(0),2,,))
        PRINT file$;:
        PRINT Breite:,breite%,Höhe:,höhe%
        PRINT
        FileMode 2
        RETURN back$

    EndProc

    PROC GetJPGDIM

        Segment-Laenge des 1. Segmentes suchen
        und ueberspringen.
        #######################################
        DEF MakeWord(2) Or(%(1),Mul(%(2),$100))
        Declare aaa%,back$
        Parameters file$
        FileMode 0
        Assign #1,file$
        OpenRW #1
        DIM size#,65535  Maximale Segmentgroesse
        BlockRead(#1,size#,0,65535)
        CloseRW #1
        Segmentlaenge 2 Byte + 4 = Segmentende
        LET aaa% = add(Makeword(Byte(size#,5),Byte(size#,4)),4)
        DISPOSE size#
        FileMode 2
        GetJPGMatch file$,aaa% Position ab Segmentende suchen
        LET back$=@$(0)
        RETURN back$

    endproc

    GetJPGDIM File$

EndProc

Ende des JPG-Abschnittes
********************************************
declare file$, wählen%, ende%, weg%

PROC BILDLADEN

    let file$=@LoadFile$(Verzeichnis wählen, auf eine Datei klicken, auf Öffnen klicken,
    alle Bilder|*.BMP;*.JPG;*.PCX;*.TGA;*.GIF;*.WMF;*.EMF;*.ICO;*.PNG)

ENDPROC

Hauptprogramm
Def IsFileExt(2) Equ$(Right$(Upper$($(1)),3),$(2))
Decimals 0
Window 0,0-600,300
Cls
let wählen%=@createbutton(%hwnd,Bild wählen,350,190,170,24)
let weg%=@createbutton(%hwnd,Ende,350,220,170,24)
let ende% = 0

WHILENOT ende%

    waitinput

    IF @getfocus(weg%)

        let ende% = 1

    ELSEIF @getfocus(wählen%)

        cls
        BILDLADEN

        IF @neq$(file$,)

            If IsFileExt(file$,BMP)

                GetBMPDimension file$

            ELSEIf IsFileExt(file$,GIF)

                GetGIFDimension file$

            ELSEIf IsFileExt(file$,PCX)

                GetPCXDimension file$

            ELSEIf IsFileExt(file$,TGA)

                GetTGADimension file$

            ELSEIf IsFileExt(file$,WMF)

                GetWMFDimension file$

            ELSEIf IsFileExt(file$,EMF)

                GetEMFDimension file$

            ELSEIf IsFileExt(file$,JPG)

                GetJPGDim file$

            ELSEIf IsFileExt(file$,PNG)

                GetPNGDimension file$

            ELSEIf IsFileExt(file$,ICO)

                GetICODimension<
le$ endif endif endif wend end
 
15.07.2007  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

3.106 Views

Untitledvor 0 min.
H.Brill04.05.2019
Georg Teles15.05.2014
funkheld12.01.2014
J. Strahl17.06.2011

Themeninformationen

Dieses Thema ha 1 subscriber:

unbekannt (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie