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
|
| | | | |
| | 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:
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. |
| | | | |
| | 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 ▲ |
| |
|
AnswerTopic-Options | 11.390 Views |
ThemeninformationenDieses Thema hat 2 subscriber: |