Größe aus JPEG/PNG Datei auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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

Beitrag von KeyKon »

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
(\/) (°,,,°) (\/)
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

du musst sie warscheinlich mit loadimage schon einlesen dann imagewidth und imagehight benutzen
Bild
Benutzeravatar
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:

Beitrag von KeyKon »

Naja, das muss doch irgendwie auch anders gehen, ich möchte so wenig Zeit/Byte wie möglich brauchen damit das bei vielen Bildern nicht lange dauert...

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> 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
a²+b²=mc²
Benutzeravatar
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:

Beitrag von KeyKon »

Danke, ich denke das hilft mir weiter!

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
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:

Beitrag von KeyKon »

Ich hab von VB keinen Schimmer deswegen mal die Frage:
Was bedeutet der Befehl Mult(Zahl,Zahl)
EDIT: ^^ :oops: hab übersehen das das ne eigene Prozedure ist...
Was aber bedeutet der Befehl CLng(Zahl)?

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
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:

Beitrag von Falko »

http://www.vbarchiv.net/commands/CLng.php

Ist sogesehen ein einfaches Long, würde ich sagen.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
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:

Beitrag von KeyKon »

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:

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"
Ich hab da jetzt noch nen Geschwindigkeitsvergleich dabei, aber der mischt da ja nich rein...

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> 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. :wink:

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
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:

Beitrag von KeyKon »

Was für Bilder werden denn verwaltet? Fotos direkt aus der Kamera oder von einem Programm erstellte Bilder?

KeyKon
(\/) (°,,,°) (\/)
Antworten