none
Affichage et enregistrement image WPF RRS feed

  • Question

  • Bonsoir à tous !


    Voilà j'ai décidé de porter mes projets de WinForm à WPF hors je me heurte à un problème : 
    Mon logiciel possède un espace utilisateur. Normalement, on sélectionne une image via un openfiledialog, cette image est a la fois sauvegardée et utilisée par le control "Image". Hors, mon code pour WinForm ne marche pas sous WPF car les propriétés ne sont pas les mêmes pour une PictureBox que pour une "Image". 
    Voilà mon code actuel non fonctionnel : 

    Public Class SetupScreen
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
            Dim OpenFileDialog2 As New Microsoft.Win32.OpenFileDialog()
            Dim ImagePath As String = Nothing
            If OpenFileDialog2.ShowDialog() = vbOK Then
                ImagePath = OpenFileDialog2.FileName
                My.Computer.FileSystem.CopyFile(ImagePath, System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MTS\profpic.png", overwrite:=True)
            Else : Exit Sub : End If
            If roundPB IsNot Nothing Then roundPB.Source.Freeze()
            roundPB.Source = New BitmapImage(New Uri(ImagePath, UriKind.Relative))
        End Sub
        Private Sub MetroWindow_Loaded(sender As Object, e As RoutedEventArgs)
            If My.Computer.FileSystem.FileExists(System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MTS\profpic.png") Then
                Dim ImagePath As String = System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MTS\profpic.png"
                roundPB.Source = New BitmapImage(New Uri(ImagePath, UriKind.Relative))
                roundPB.Source.Freeze()
            End If
        End Sub
    End Class
    Absolument rien ne marche, ni la définition de roundPB, ni la sauvegarde mais aucun message d'erreur n'est retourné.
    Pouvez-vous m'éclairer ? 
    Merci !


    mardi 14 avril 2015 15:54

Réponses

  • ImageRep est un résidu de mon ancien code pour winform, je l'ai déjà enlevé sur visual studio mais j'ai oublié sur le forum. 

    J'ai remplacé la ligne mais la sauvegarde ne marche toujours pas, profpic.png n'est toujours pas remplacé dans le dossier quand on sélectionne une autre image et aucun code d'erreur n'est retourné...

    EDIT : J'ai résolu mon problème en passant par BitmapImage : 

        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
            Dim OpenFileDialog2 As New Microsoft.Win32.OpenFileDialog()
            Dim ImagePath As String = Nothing
            Dim bitmapimage As New BitmapImage
            If OpenFileDialog2.ShowDialog() = True Then
                ImagePath = OpenFileDialog2.FileName
                bitmapimage.BeginInit()
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad
                bitmapimage.UriSource = New Uri(ImagePath)
                bitmapimage.EndInit()
                My.Computer.FileSystem.CopyFile(ImagePath, My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\MTS\profpic.png", overwrite:=True)
                roundPB.Source = bitmapimage
            Else
            End If
        End Sub
        Private Sub MetroWindow_Loaded(sender As Object, e As RoutedEventArgs)
            If My.Computer.FileSystem.FileExists(System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MTS\profpic.png") Then
                Dim ImagePath As String = My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\MTS\profpic.png"
                Dim bitmapimage As New BitmapImage
                bitmapimage.BeginInit()
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad
                bitmapimage.UriSource = New Uri(ImagePath)
                bitmapimage.EndInit()
                roundPB.Source = bitmapimage
            End If
        End Sub

    mercredi 15 avril 2015 15:18

Toutes les réponses

  • Bonjour,

    Il faut remplacer :

    System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MTS\profpic.png"


    Par:

    My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\MTS\profpic.png"

    Par contre Je ne vois pas à quoi correspond la variable "ImageRep" !? De plus la ligne en question ne me semble pas logique.

    Bien à vous.


    ZGuideTV.NET - administrator/developer

    mercredi 15 avril 2015 10:19
  • ImageRep est un résidu de mon ancien code pour winform, je l'ai déjà enlevé sur visual studio mais j'ai oublié sur le forum. 

    J'ai remplacé la ligne mais la sauvegarde ne marche toujours pas, profpic.png n'est toujours pas remplacé dans le dossier quand on sélectionne une autre image et aucun code d'erreur n'est retourné...

    EDIT : J'ai résolu mon problème en passant par BitmapImage : 

        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
            Dim OpenFileDialog2 As New Microsoft.Win32.OpenFileDialog()
            Dim ImagePath As String = Nothing
            Dim bitmapimage As New BitmapImage
            If OpenFileDialog2.ShowDialog() = True Then
                ImagePath = OpenFileDialog2.FileName
                bitmapimage.BeginInit()
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad
                bitmapimage.UriSource = New Uri(ImagePath)
                bitmapimage.EndInit()
                My.Computer.FileSystem.CopyFile(ImagePath, My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\MTS\profpic.png", overwrite:=True)
                roundPB.Source = bitmapimage
            Else
            End If
        End Sub
        Private Sub MetroWindow_Loaded(sender As Object, e As RoutedEventArgs)
            If My.Computer.FileSystem.FileExists(System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MTS\profpic.png") Then
                Dim ImagePath As String = My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\MTS\profpic.png"
                Dim bitmapimage As New BitmapImage
                bitmapimage.BeginInit()
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad
                bitmapimage.UriSource = New Uri(ImagePath)
                bitmapimage.EndInit()
                roundPB.Source = bitmapimage
            End If
        End Sub

    mercredi 15 avril 2015 15:18
  • Bonjour,

    Voici un exemple pour afficher une image avec PictureBox1 + sauvegarder l'image du PictureBox1 :

    Voici mon codes :

    Public Class Form1
        Dim ListPath As New List(Of String)
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim OpenFileDialog1 As New OpenFileDialog
            OpenFileDialog1.Filter = "JPG (*.jpg)|*.jpg|JPEG (*.jpeg)|*.jpeg"
            OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
            OpenFileDialog1.Multiselect = True
            If (OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK) Then
                ListPath.AddRange(OpenFileDialog1.FileNames)
                ListBox1.Items.AddRange(OpenFileDialog1.SafeFileNames)
            End If
            ListBox1.SelectedIndex = 0
        End Sub
        Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
            PictureBox1.ImageLocation = ListPath(ListBox1.SelectedIndex)
        End Sub
    
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            End
        End Sub
    
        Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            ListBox1.SelectedIndex += 1
        End Sub
    
        Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
            ListBox1.SelectedIndex -= 1
        End Sub
    
        Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
            If ColorDialog1.ShowDialog() = DialogResult.OK Then
                Me.BackColor = ColorDialog1.Color
            End If
        End Sub
    
        Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
            If ListBox1.Items.Count > 0 Then
                Dim save As New SaveFileDialog
                save.FileName = "profpic.png"
                save.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                If save.ShowDialog = Windows.Forms.DialogResult.OK Then
                    PictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Png)
                    MessageBox.Show("L'image à était enregistrer", "SAUVEGARDER", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Else
                    MessageBox.Show("L'image n'a pas peut étre enregistrer", "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
            End If
        End Sub
    End Class

    Cordialement,

    vendredi 17 avril 2015 14:15