EXIF Aufnahmedatum ändern

18/01/2009 - 22:20 von Andreas Mahub | Report spam
Hi Leute,

nach dem ich mit eurer Hilfe ich es endlich geschafft habe, dass über 1200
Fotos binnen von Sekunden in mein Datagridview eingelesen werden (bzw. nicht
die Fotos selbst, sondern das Aufnahmedatum), möchte ich jetzt die
ausgewàhlten Dateien in ein neues Verzeichnis kopieren.

Funktioniert wunderbar, allerdings möchte ich in der kopierten Datei das
Aufnahmedatum àndern. Leider klappt das mit BitmapMetadata nicht, weil die
Eigenschaft IsFrozen auf TRUE steht. Diese ist auch ReadOnly. Wie kann ich
jetzt das Aufnahmedatum àndern? Oder geht das gar nicht? Mir bliebe dann nur
der Weg über Bild ziehen, Metadaten kopieren und dann ein neues Bild
erstellen (statt FileCopy zu verwenden).

Gruß
Andy
 

Lesen sie die antworten

#1 Andreas Mahub
19/01/2009 - 00:17 | Warnen spam
Hi,

hmmm... ich habe mich erstmal damit versucht, eine neue Datei zu erstellen
wo ich die Metadaten natürlich bestimmen kann. Das ist aber sooooo was von
langsam... :-(

Hier erstmal meine Lösung die ich im tiefsten WWW finden konnte, ich hoffe
ihr habt eine bessere Idee:

Dim strm As System.IO.FileStream = New
System.IO.FileStream(RS.Filename, System.IO.FileMode.Open,
System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim decoder As System.Windows.Media.Imaging.JpegBitmapDecoder =
New System.Windows.Media.Imaging.JpegBitmapDecoder(strm,
System.Windows.Media.Imaging.BitmapCreateOptions.PreservePixelFormat,
System.Windows.Media.Imaging.BitmapCacheOption.Default)
Dim m As System.Windows.Media.Imaging.BitmapMetadata =
CType(decoder.Frames(0).Metadata,
System.Windows.Media.Imaging.BitmapMetadata)
Dim output_jpgStream As System.IO.FileStream = New
System.IO.FileStream(NewFilename, System.IO.FileMode.Create,
System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)
Dim jpgEncoder As System.Windows.Media.Imaging.JpegBitmapEncoder
= New System.Windows.Media.Imaging.JpegBitmapEncoder()
Dim jpgMetadata As System.Windows.Media.Imaging.BitmapMetadata =
New System.Windows.Media.Imaging.BitmapMetadata("jpg")
jpgMetadata.CameraManufacturer = m.CameraManufacturer
Dim l() As String = {"", ""}
Dim col As System.Collections.ObjectModel.ReadOnlyCollection(Of
String) = New System.Collections.ObjectModel.ReadOnlyCollection(Of
String)(New List(Of String)(l))
jpgMetadata.Keywords = col
jpgMetadata.Comment = ""
jpgMetadata.DateTaken = CDate(RS.KorrigierteZeit)
jpgEncoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(decoder.Frames(0),
Nothing, jpgMetadata, Nothing))
jpgEncoder.Save(output_jpgStream)
output_jpgStream.Flush()
output_jpgStream.Close()
strm.Close()

Gruß
Andy


"Andreas Mahub" schrieb im Newsbeitrag
news:
Hi Leute,

nach dem ich mit eurer Hilfe ich es endlich geschafft habe, dass über 1200
Fotos binnen von Sekunden in mein Datagridview eingelesen werden (bzw.
nicht die Fotos selbst, sondern das Aufnahmedatum), möchte ich jetzt die
ausgewàhlten Dateien in ein neues Verzeichnis kopieren.

Funktioniert wunderbar, allerdings möchte ich in der kopierten Datei das
Aufnahmedatum àndern. Leider klappt das mit BitmapMetadata nicht, weil die
Eigenschaft IsFrozen auf TRUE steht. Diese ist auch ReadOnly. Wie kann ich
jetzt das Aufnahmedatum àndern? Oder geht das gar nicht? Mir bliebe dann
nur der Weg über Bild ziehen, Metadaten kopieren und dann ein neues Bild
erstellen (statt FileCopy zu verwenden).

Gruß
Andy

Ähnliche fragen