Größe aus JPEG/PNG Datei auslesen
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit) - Wohnort: Ansbach
- Kontaktdaten:
Größe aus JPEG/PNG Datei auslesen
Wie geht das?
Ich möchte die Größe (Pixel) des Bildes auslesen ohne die gesammte Datei einlesen zu müssen, wo stehen also die entsprechenden Werte in der JPEG/PNG Datei?
KeyKon
Ich möchte die Größe (Pixel) des Bildes auslesen ohne die gesammte Datei einlesen zu müssen, wo stehen also die entsprechenden Werte in der JPEG/PNG Datei?
KeyKon
(\/) (°,,,°) (\/)
> Naja, das muss doch irgendwie auch anders gehen
ja, geht auch anders. Ich habe vor Urzeiten eine Routine gefunden, die nur
ein paar Bytes aus dem Header der Datei liest. Ist leider in VB, lässt sich
aber meines Erachtens relativ leicht in PB umsetzen:
http://www.freevbcode.com/ShowCode.Asp?ID=112
Grüße ... Kiffi
ja, geht auch anders. Ich habe vor Urzeiten eine Routine gefunden, die nur
ein paar Bytes aus dem Header der Datei liest. Ist leider in VB, lässt sich
aber meines Erachtens relativ leicht in PB umsetzen:
http://www.freevbcode.com/ShowCode.Asp?ID=112
Grüße ... Kiffi
a²+b²=mc²
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit) - Wohnort: Ansbach
- Kontaktdaten:
Ich glaub nich das der VB-Code von Kiffi funktioniert, zumindest funzt meine umsetzung bis jetzt nur mit JPEGs die ich mit IView gespeichert habe, vielleicht hab ich aber auch irgendeinen Fehler rein. Könnte sich das mal einer Anschauen:
Ich hab da jetzt noch nen Geschwindigkeitsvergleich dabei, aber der mischt da ja nich rein...
KeyKon
Code: Alles auswählen
Dim Buffer.w(3)
path$ = OpenFileRequester("JPEG öffnen...","","JPEG|*.jpg;*.jpeg|All|*.*",0)
vor1 = ElapsedMilliseconds()
If ReadFile(0,path$) = 0
Debug "Konnte nicht öffnen1"
End
EndIf
BUFFERSIZE = Lof()
Buffer(0) = ReadByte()+256
Buffer(1) = ReadByte()+256
Buffer(2) = ReadByte()+256
Repeat
If (Buffer(0) = $FF And Buffer(1) = $D8 And Buffer(2) = $FF)
Break
ElseIf Loc() >= BUFFERSIZE-10
End
EndIf
Buffer(0) = Buffer(1)
Buffer(1) = Buffer(2)
Buffer(2) = ReadByte()+256
ForEver
Buffer(0) = ReadByte()+256
Buffer(1) = ReadByte()+256
Repeat
Repeat
If Buffer(0) = $FF And Buffer(1) <> $FF
Break
ElseIf Loc() >= BUFFERSIZE-10
End
EndIf
Buffer(0) = Buffer(1)
Buffer(1) = ReadByte()+256
ForEver
Buffer(0) = Buffer(1)
If Buffer(0) = $C0 Or Buffer(0) = $C1 Or Buffer(0) = $C2 Or Buffer(0) = $C3 Or Buffer(0) = $C5 Or Buffer(0) = $C6 Or Buffer(0) = $C7 Or Buffer(0) = $C9 Or Buffer(0) = $CA Or Buffer(0) = $CB Or Buffer(0) = $CD Or Buffer(0) = $CE Or Buffer(0) = $CF
Debug Hex(Buffer(0)-256)
Break
ElseIf Loc() >= BUFFERSIZE-10
End
EndIf
Buffer(1) = ReadByte()+256
ForEver
FileSeek(Loc()+3)
Buffer(0) = ReadByte()
Buffer(1) = ReadByte()
Buffer(2) = ReadByte()
Buffer(3) = ReadByte()
h1 = (Buffer(1)) + (Buffer(0)*256)
w1 = (Buffer(3)) + (Buffer(2)*256)
d1 = ReadByte()*8
CloseFile(0)
nach1 = ElapsedMilliseconds()
UseJPEGImageDecoder()
vor2 = ElapsedMilliseconds()
If LoadImage(0,path$) = 0
Debug "Konnte nicht öffnen2"
End
EndIf
h2 = ImageHeight()
w2 = ImageWidth()
d2 = ImageDepth()
FreeImage(0)
nach2 = ElapsedMilliseconds()
Debug path$
Debug "1: "+Str(w1)+"x"+Str(h1)+"x"+Str(d1)+" - "+Str(nach1-vor1)+" ms"
Debug "2: "+Str(w2)+"x"+Str(h2)+"x"+Str(d2)+" - "+Str(nach2-vor2)+" ms"
KeyKon
(\/) (°,,,°) (\/)
> Ich glaub nich das der VB-Code von Kiffi funktioniert,
1. Zuviel der Ehre, aber der Code ist nicht von mir
2. Der Code funktioniert in der VB-Version sehr wohl, denn er läuft seit
mehreren Monaten klaglos in einer Software, die täglich mehrere tausend
Bilder verarbeitet. Da muss also irgendwas mit Deiner Konvertierung nicht
stimmen.
Grüße ... Kiffi
1. Zuviel der Ehre, aber der Code ist nicht von mir

2. Der Code funktioniert in der VB-Version sehr wohl, denn er läuft seit
mehreren Monaten klaglos in einer Software, die täglich mehrere tausend
Bilder verarbeitet. Da muss also irgendwas mit Deiner Konvertierung nicht
stimmen.

Grüße ... Kiffi
a²+b²=mc²