ich habe ein Programm, dass mit Hilfe der Free_Image.dll metainformationen aus einem Bild lesen kann. Soweit funktioniert es.
Jetzt habe ich den Wunsch diese Daten auch zu manipulieren.
Aktuell interessieren mich lediglich die Keywords aus dem Bereich IPTC.
Im angehangenen Code habe ich eine Procedure, der ich Dateinamen und Keyword übergebe.
Nach der PDF-Anleitung habe ich dann die Datei geöffnet, abgefragt ob sie schreibbar ist, meine Daten angelegt und geschrieben.
Bis dahin geht's, nur das Speichern ins Bild funktioniert noch nicht.
Ich habe mitlerweile versucht unter anderem Dateinamen als die geöffnete Datei zu speichern, auch hier kein Erfolg.
Ich hoffe es kann mir jemand meinen Fehler zeigen.
Gruß Scoty
Code: Alles auswählen
Procedure write_IPTC_keyword(imgpath.s, keyword.s)
fif = CallFunction(0, "_FreeImage_GetFileType@8", @imgpath, 0) ; Dateityp aus Datei lesen
If fif = #FIF_UNKNOWN
fif = CallFunction(0, "_FreeImage_GetFIFFromFilename@4", @imgpath) ; Bei Fehlschlag Dateityp aus Daiteinamen ermitteln
If fif = #FIF_UNKNOWN:ProcedureReturn 1:EndIf
EndIf
If CallFunction(0, "_FreeImage_FIFSupportsWriting@4", fif):Else:ProcedureReturn 2:EndIf
dib = CallFunction(0, "_FreeImage_Load@12", fif, @imgpath, 0)
If dib : Else : ProcedureReturn 3:EndIf
*tag = CallFunction(0, "_FreeImage_CreateTag@0")
If *tag : Else : ProcedureReturn 4:EndIf
; TagDaten schreiben
key.s = "Keywords"
Debug CallFunction(0, "_FreeImage_SetTagKey@8", *tag, @key)
Debug CallFunction(0, "_FreeImage_SetTagLength@8", *tag, Len(keyword))
Debug CallFunction(0, "_FreeImage_SetTagCount@8", *tag, Len(keyword))
Debug CallFunction(0, "_FreeImage_SetTagType@8", *tag, #FIDT_ASCII)
; the tag value must be stored after
; the tag Data type, tag count And tag length have been filled.
Debug CallFunction(0, "_FreeImage_SetTagValue@8", *tag, @keyword)
; store the tag
Debug CallFunction(0, "_FreeImage_SetMetadata@16", #FIMD_IPTC, dib, @key, *tag);
; destroy the tag
Debug CallFunction(0, "_FreeImage_DeleteTag@4", *tag)
save.s = "c:\BildNeu.JPG"
Debug CallFunction(0, "_FreeImage_Save@16", fif, *dib, @save , 0)
EndProcedure
Code: Alles auswählen
1
1
1
1
1
1
1
0
0