Seite 1 von 1

Metadaten in JPEG lesen und bearbeiten

Verfasst: 25.09.2011 21:38
von scoty
Hallo Community,
ich möchte mit meinem Programm die Metadaten aus JPEGs lesen und bearbeiten können.
Ich bin schon ein paar Tage am suchen und testen doch brauche ich nun Hilfe.

Ich habe herausgefunden, dass der Einfachste Weg die Benutzung der FreeImage.dll ist, jedoch liegt genau dort mein erstes Problem.

Mein Programm öffnet bereits die DLL und leist die komplett verfügbaren Funktionen ein und zeigt sie mit an.
Ich kann mir auch die Copyright und Versionsinformationen anzeigen lassen, versuche ich aber die den FileType auszulesen, schlägt dies fehl.

Das erkenne ich am Rückgabewert -1 (fif unkown)

Ich vermute, dass es mit dem Dateinamen zu tun hat, dass ich diesen nicht richtig übergebe.
Die angegebene Datei existiert, das habe ich geprüft.
Ich habe es auch nur mit dem Dateinamen versucht und das Bild in das gleiche Verzeichnis, wie den Quelltext bzw. die DLL kopiert, auch hier klappt es nicht.

Der ErrorMessageHandler wirft mir auch keine passenden Infos aus.
Hat vielleicht jemand eine Idee?

Gruß scoty

Code: Alles auswählen

#FIF_UNKNOWN = -1


Prototype FreeImage_GetFileType(filename.s,flags.l=0)
Prototype RWFreeImage_GetFormatFromFIF  (fif.l) 
Prototype FreeImage_GetFormatFromFIF    (fif.l)

Global FreeImage_GetFileType.FreeImage_GetFileType=GetFunction(0,"_FreeImage_GetFileType@8")
Global RWFreeImage_GetFormatFromFIF . RWFreeImage_GetFormatFromFIF  = GetFunction(0, "_FreeImage_GetFormatFromFIF@4")
Global FreeImage_GetFormatFromFIF   . FreeImage_GetFormatFromFIF    = GetFunction(0, "_FreeImage_GetFormatFromFIF@4")

Procedure Sample_FreeImageErrorHandler(fif.l, message.l)
	Debug " *** Sample_FreeImageErrorHandler START"
	If fif <> #FIF_UNKNOWN
		Debug PeekS(CallFunction(0, "_FreeImage_GetFormatFromFIF@4", fif))+" Format"
	EndIf
	Debug PeekS(message, -1, #PB_Ascii)
	Debug " *** Sample_FreeImageErrorHandler END"
EndProcedure

If OpenFile(0, "c:\dll\FreeImage.dll")
    Debug "Die Biblithek wurde ortnungsgemäß gefunden"
    Debug " "
    CloseFile(0)
  Else
    Debug "Die Bibliothek FreeImage konnte nicht gefunden werden!"
EndIf

Debug "Bibliothek wird geöffnet:"
If OpenLibrary(0, "c:\dll\FreeImage.dll")
  Else
    Debug "Die Bibliothek FreeImage konnte nicht geöffnet werden!"
    End
EndIf
 

Debug "Bibliothek durchsuchen:"
If ExamineLibraryFunctions(0)
  Debug ""
  Debug "Funtionsnamen:"
  While NextLibraryFunction()
      Debug LibraryFunctionName()
  Wend  
EndIf

Debug ""
Debug "Version: "+PeekS(CallFunction(0, "_FreeImage_GetVersion@0"))
Debug PeekS(CallFunction(0, "_FreeImage_GetCopyrightMessage@0"))
Debug CallFunction(0, "_FreeImage_Initialise@4", #False)
Debug PeekS(CallFunction(0, "_FreeImage_SetOutputMessage@4", @Sample_FreeImageErrorHandler()))

imgpath.s="c:\Bild.JGP"
;imgpath.s="Bild.JGP"
Debug imgpath

*pointer = AllocateMemory(Len(imgpath)+10)
PokeS(*pointer, imgpath, -1, #PB_Ascii)
Debug PeekS(*pointer)
 fif = CallFunction(0, "_FreeImage_GetFileType@8", *pointer, 0)
;fif = FreeImage_GetFileType(imgpath, 0)
If fif = #FIF_UNKNOWN
  Debug "FIF_UNKNOWN"
  fif = CallFunction(0, "_FreeImage_GetFIFFromFilename@4", *pointer)
  If fif = #FIF_UNKNOWN
    Debug "FIF_UNKNOWN"
  EndIf
EndIf

Debug CallFunction(0, "_FreeImage_FIFSupportsReading@4", fif)
Debug CallFunction(0, "_FreeImage_Load@12", fif, *pointer, 0)
Debug PeekS(CallFunction(0, "_FreeImage_SetOutputMessage@4", @Sample_FreeImageErrorHandler()))

FreeMemory(*pointer)

CloseLibrary(0)

Re: Metadaten in JPEG lesen und bearbeiten

Verfasst: 25.09.2011 22:10
von scoty
Ich hatte meinen Quelltext vergessen, sorry

Re: Metadaten in JPEG lesen und bearbeiten

Verfasst: 25.09.2011 23:06
von Thorium
:mrgreen:

Code: Alles auswählen

imgpath.s="c:\Bild.JGP"
jetzt müsstest du selbst drauf kommen. ^^

Re: Metadaten in JPEG lesen und bearbeiten

Verfasst: 25.09.2011 23:23
von scoty
! ! ! DANKE ! ! !

Kaum zu glauben, aber ich musst die Zeile noch ca. eine Minute lang anstarren, bis ich den Fehler erkannt habe.

Es ist eben Schwierige einen Wald zwischen Bäumen zu finden .........