Metadaten beim konvertieren eines Bildes übernehmen

31/08/2009 - 14:00 von Johann Löwen | Report spam
Hallo,

Ich möchte gerne ein Bild JPEG in das Format WDP (Windows Media Photo,
HD Photo) konvertieren.
Es funktioniert auch soweit nur das die Metadaten nicht in das neue
Bild übernommen werden.


Hier meine Funktion:


Public Shared Sub ConvertToWDP(ByVal sourceStream As
System.IO.Stream, ByVal destinationStream As System.IO.Stream, ByVal
quality As Single, ByVal processMetadata As Boolean)
Dim imageDecoder As
System.Windows.Media.Imaging.BitmapDecoder = Nothing
imageDecoder =
System.Windows.Media.Imaging.BitmapDecoder.Create(sourceStream,
System.Windows.Media.Imaging.BitmapCreateOptions.PreservePixelFormat,
System.Windows.Media.Imaging.BitmapCacheOption.None)


Dim imageEncoder As New
System.Windows.Media.Imaging.WmpBitmapEncoder()
If quality < 0 Then quality = 0
If quality > 1 Then quality = 1
imageEncoder.ImageQualityLevel = quality
imageEncoder.Frames.Add(imageDecoder.Frames(0))
imageEncoder.Save(destinationStream)
destinationStream.Flush()
End Sub


hat einer ne Idee wie das anstellen kann das die Metadaten übernommen
werden?
 

Lesen sie die antworten

#1 Johann Löwen
01/10/2009 - 08:18 | Warnen spam
Ich habe es nun soweit hinbekommen das ich beim Debuggen im Frame des
ImageEncoders auch noch die Metadaten sehen kann aber wenn dieser mit Save
die Daten wegschreibt finde ich keine Metadaten in der Datei!

Kann mir bitte einer erklàren was ich falsch machen?

hier meine aktuelle Methode:

Public Sub SaveAsHdp(ByVal sourceStream As System.IO.Stream, ByVal
destinationStream As System.IO.Stream, ByVal quality As Int32)
If ((sourceStream IsNot Nothing) AndAlso (sourceStream.CanRead))
And ((destinationStream IsNot Nothing) AndAlso (destinationStream.CanWrite))
Then
Dim decoder As System.Windows.Media.Imaging.BitmapDecoder =
Nothing

Try
decoder =
System.Windows.Media.Imaging.BitmapDecoder.Create(sourceStream,
Windows.Media.Imaging.BitmapCreateOptions.PreservePixelFormat Or
Windows.Media.Imaging.BitmapCreateOptions.IgnoreColorProfile,
System.Windows.Media.Imaging.BitmapCacheOption.Default)

If (decoder.Frames.Count > 0) AndAlso (decoder.Frames(0)
IsNot Nothing) Then
Dim destinationFrame As
Windows.Media.Imaging.BitmapFrame = Nothing
Dim imageEncoder As New
System.Windows.Media.Imaging.WmpBitmapEncoder()

Try
destinationFrame =
Windows.Media.Imaging.BitmapFrame.Create(decoder.Frames(0),
decoder.Frames(0).Thumbnail, decoder.Frames(0).Metadata.Clone(),
decoder.ColorContexts)

If quality <= 0 Then quality = 1
If quality > 100 Then quality = 100
imageEncoder.ImageQualityLevel = quality / 100
imageEncoder.Frames.Add(destinationFrame)
imageEncoder.Save(destinationStream)

destinationStream.Flush()
Catch ex As Exception
Throw
Finally
destinationFrame = Nothing
imageEncoder = Nothing
End Try
End If
Catch ex As Exception
Throw New System.IO.FileFormatException("FileFormat not
supported")
Finally
decoder = Nothing
End Try
Else
Throw New System.ArgumentOutOfRangeException("Can't handle
Stream-Argument!")
End If
End Sub

Ähnliche fragen