none
Insertion image en WPF (vb.net), conversion image, besoin d'aide RRS feed

  • Question

  • Bonjour les amis,

    Je suis en train de développez une application WPF, qui permettrait de faire une gestion de contact, ajouter, supprimer, ..., des contacts.

    J'ai pu me documenter sur la toile, concernant la mise en place de ceci, mais je bloque sur la liaison image - base de données.

    Imports System
    Imports System.Data
    Imports System.IO
    Imports Microsoft.Win32
    Imports System.Data.SqlClient
    Imports System.ComponentModel
    Imports Microsoft.VisualBasic
    Imports System.Windows.Media.Animation
    Imports System.Windows.Navigation
    Imports System.Windows.Controls.Image
    Imports System.Windows.Media.Imaging
    Imports System.IO.MemoryStream
    
    Partial Public Class Window2
    
        'Private ContactData As New ContactsDataSet
        'Private taCont As New ContactsDataSetTableAdapters.ContactTBLTableAdapter
        'Private taManager As New ContactsDataSetTableAdapters.TableAdapterManager
        'Private View As CollectionView
        Dim Window1 As New Window1
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
            Me.Close()
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
            Window1.taCont.Insert(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text, TextBox6.Text, Today.Date.ToShortDateString, Nothing)
    
            Window1.taCont.Fill(Window1.ContactData.ContactTBL)
    
            MsgBox("Completed")
    
            For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(Me.StackPanel2) - 1
                Dim txt As TextBox = VisualTreeHelper.GetChild(Me.StackPanel2, i)
                If txt.Text IsNot Nothing Then
                    txt.Text = String.Empty
                End If
            Next
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button3.Click
            Dim OpenFileDialog As New OpenFileDialog
    
            OpenFileDialog.FileName = Nothing
    
            OpenFileDialog.ShowDialog()
    
            Dim bmp As New BitmapImage(New Uri(OpenFileDialog.FileName().Trim))
    
            If Not OpenFileDialog.FileName = Nothing Then
                Me.Image1.Source = bmp
            End If
    
            Dim stream As FileStream = New FileStream(OpenFileDialog.FileName, FileMode.Open, FileAccess.Read)
            Dim reader As BinaryReader = New BinaryReader(stream)
    
            Dim Data As Byte() = reader.ReadBytes(stream.Length)
            reader.Close()
            stream.Close()
    
            Window1.taCont.Insert(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text, TextBox6.Text, Today.Date.ToShortDateString, Nothing)
    
            If Not OpenFileDialog.FileName = Nothing Then
                Me.Image1.Source = bmp
            End If
    
        End Sub
    End Class
    

    Je voudrais inserer, pour chaque contact, sa photo, mais pas moyen d'effectuer cette tâche. J'ai trouver des exemples, en VB.NET, qui fonctionnent en winform, mais pas moyen de l'adapter en WPF, notamment la conversion image.source du controle image en binaire.

    On me parle de converter, mais les exemples fournis sont écrire en C#, en vb.net, les messages rencontrés lors de la compilations sont diverses et variés.

    Cela fait plusieurs mois que je cherche, sans succès.

    Dans une base de données SQL, les images sont stockées sous format binaire. Donc pour afficher l'image dans le contrôle image de WPF, il faut effectuer une conversion.

    Inversement, pour pouvoir inserer une image dans une base de données SQL, il faut convertir le format de lecture du contrôle image de WPF, en binaire (format de stockage de l'image dans la BDD SQL).

    Et là, de bloque.

    Les exemples de la toile, utilisent la technologie ADO.NET, avec les chaines de connections (Connectionstring), sqlcommand, cmd.parameter.Add(), ...

    En vb.net, j'utilise pour inserer mes données dans le base de données : tableAdapter.insert(textbox1.text, ...), par contre je ne trouve pas l'equivalent de sqlcommand.parameter.add(), en VB.net.

    Pourriez-vous m'aider à débloquer la situation.

    En vous remerciant par avance.

    Cordialement.

    samedi 21 avril 2012 09:15

Réponses

  • Je vous remercie de votre réponse, ainsi que de vos eclairicissements.

    En effet, le paramètre Data, n'était utilisé null part, merci de votre remarque. Effectivement cela résoud mon problème, en passant de paramètre Data à la place de nothing.

    Merci pour toute l'aide que vous m'avez apportée.

    Cordialement.

    • Marqué comme réponse Kensi22 mercredi 25 avril 2012 18:06
    mercredi 25 avril 2012 18:06

Toutes les réponses

  • Bonjour,

    Apparemment Data n'est pas utilisé ? Sinon il faudra que je fasse un petit test avec les DataSets typés auxquels je n'ai jamais vraiment accrochés.

    Après examen de plus près je dirais :
    - utiliser FileStream (sans encodage)
    - passer le paramètre Data
    et cela devrait aller. Sinon indiquer quel est le problème exact que vous avez ? (pour l'instant vous semblez passer Nothing au lieu des données binaires ?)

    SqlCommand.Parameters.Add est un une fonction de la bibliothèque .NET et s'utilise donc depuis VB de la même façon que depuis C# mais qu'est ce que cela viendrait faire ici avec des datasets typés, je pense qu'il y a peut-être une confusion entre des exemples qui concernent différentes façons d'accéder aux données.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    samedi 21 avril 2012 10:00
  • Je vous remercie de votre réponse, ainsi que de vos eclairicissements.

    En effet, le paramètre Data, n'était utilisé null part, merci de votre remarque. Effectivement cela résoud mon problème, en passant de paramètre Data à la place de nothing.

    Merci pour toute l'aide que vous m'avez apportée.

    Cordialement.

    • Marqué comme réponse Kensi22 mercredi 25 avril 2012 18:06
    mercredi 25 avril 2012 18:06