Wie kann ich binden ein Byte-array in ein Bild, das in WPF mit einem Wert Konverter?
Ich versuche zu binden, ein Byte-array aus meiner Datenbank zu einer WPF-Bild.
Meiner XAML:
<Window.Resources>
<local:BinaryImageConverter x:Key="imgConverter" />
</Window.Resources>
...
<Image Source="{Binding Path=ImageData, Converter={StaticResource imgConverter}}" />
Habe ich geändert-code veröffentlicht von Ryan Cromwell für einen Wert Konverter:
Class BinaryImageConverter
Implements IValueConverter
Private Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
If value IsNot Nothing AndAlso TypeOf value Is Byte() Then
Dim bytes As Byte() = TryCast(value, Byte())
Dim stream As New MemoryStream(bytes)
Dim image As New BitmapImage()
image.BeginInit()
image.StreamSource = stream
image.EndInit()
Return image
End If
Return Nothing
End Function
Private Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New Exception("The method or operation is not implemented.")
End Function
End Class
Den ichmage.EndInit()
Linie der BinaryImageConverter die Convert () - Funktion löst diese NotSupportedException:
"Keine imaging-Komponente geeignet,
diesen Vorgang gefunden."InnerException: "Ausnahme von
HRESULT: 0x88982F50"
Verstehe ich nicht, was ich falsch mache. Wie bekomme ich diese zu arbeiten?
Update
Es scheint, das problem war die bytes kommen aus der Datenbank. Es muss ein problem mit der Art, wie ich war, indem man Sie in.
Meine Arbeit code unten.
InformationsquelleAutor Zack Peterson | 2009-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du kann binden ein byte[] zu Bild.
Hier ein Beispiel:
Xaml:
Code:
Can't convert type System.Byte[] to type System.Windows.Media.ImageSource
Wahrscheinlich, weil ich die Entwicklung für Windows phone.
Nicht sicher über das Jahr 2013, sondern auf .NET 4.5 Bindung
byte[]
direkt zuImage
funktioniert PrimaInformationsquelleAutor sebastianb
Vielen Dank für Ihre Hilfe. Ich habe es jetzt kapiert zu arbeiten. Ich bin immer noch nicht sicher, was genau das problem war.
Dies ist, wie ich Bilder in meine Datenbank...
Dies ist mein Wert Konverter binden Sie ein Byte-array in ein Bild...
Dies ist mein XAML-Code, verwendet der Konverter das Bild anzuzeigen...
InformationsquelleAutor Zack Peterson
Versuchen Sie es mit dieser
Ist Ihr Bild im PNG-format?
Nein. Es ist JPEG. Aber, JpegBitmapDecoder auch nicht.
Wenn Sie das Bild speichern direkt auf eine FileStream-hat es geöffnet?
Darüber hinaus werden in Ihren update-Sie Lesen das Bild von einem einem stream und dann setzen, dass die image-Objekt-Daten in die Datenbank. warum nicht einfach laden Sie die FileOpenStream direkt in die Datenbank?
InformationsquelleAutor bendewey
Meine Vermutung wäre, dass die bytes sind nicht ein legitimes Bild-format. Ich glaube, dass der Fehlercode entspricht
WINCODEC_ERR_COMPONENTNOTFOUND
, die im Einklang mit ungültigen bytes.Welches format ist das byte-array sein soll? Können Sie es speichern, und versuchen Sie, öffnen Sie es mit einem anderen imaging-Programm?
Dann bedeutet das, dass meine Antwort richtig war, haben Sie ein ungültiges format für die image-Datei (entweder das, oder die Art, wie Sie sind erste/ - Verarbeitung die bytes falsch ist und es beschädigen).
InformationsquelleAutor casperOne
Ich glaube, das ist tatsächlich ein Rechte-Problem. Versuchen Sie es mit Administratorrechten ausgeführt werden, und sehen, ob das funktioniert und gehen von dort aus.
EDIT: ich bin nicht einverstanden mit der downvote und Kommentar. Werfen Sie einen Blick auf diesen link:
http://social.expression.microsoft.com/Forums/en-US/wpf/thread/617f6711-0373-44cc-b72c-aeae20f0f7a8/
Dieser user hatte genau denselben Fehler, und es wurde verursacht durch die Sicherheitseinstellungen. Also, ich stehe zu meiner Antwort (die kann nicht die Ursache sein, aber es ist sicherlich einen Versuch Wert)
InformationsquelleAutor Razzie