Bonjour,

J'ai un petit problème assez étrange qui est parfois difficile à reproduire.

Lorsque que je convertis une série d'images au format WDP (hdphoto) et que j'ajoute une miniature intégrée dans chaque image , j'obtiens ensuite un bug étrange lorsque j'ajoute ces images dans un listview.
"Impossible de décoder l’image. Son en-tête est peut-être endommagé."

Le problème ne se produit pas quand je ne met pas de miniature intégrée.

Je ne vois pas vraiment d'où proviens le problème, peut être que je m'y prend mal pour ajouter cette miniature !

Pour que le bug se produise plus facilement il faut un listview virtualisé, utiliser une centaine d'images et ensuite scroller très vite.

Voici le code
Merci pour votre aide :

Fichier XAML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 <ListView Name="listView1" >
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
 
                    <VirtualizingStackPanel></VirtualizingStackPanel>
 
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>
        <Button  Margin="14,14,0,0" Width="52" Height="25" VerticalAlignment="Top" Name="Button1">Test</Button>
Le code en VB Net :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        'Step 1 create a lot of WDP file with thumbnail
        Dim path As String = "c:\test\"
        For i As Integer = 0 To 100
            Dim image As BitmapDecoder = BitmapDecoder.Create(New Uri(path & "test.jpg"), BitmapCreateOptions.None, BitmapCacheOption.None)
 
            Dim thumb As New TransformedBitmap(image.Frames(0), New ScaleTransform(1, 1))
 
            Dim stream As New IO.FileStream(path & i & ".wdp", IO.FileMode.Create)
 
            Dim wdp_image As New WmpBitmapEncoder
            wdp_image.Frames.Add(BitmapFrame.Create(image.Frames(0), thumb, Nothing, Nothing))
 
            wdp_image.Save(stream)
 
            stream.Close()
            stream.Dispose()
        Next
 
        'Step 2, add image to a Listview
        For Each s As String In System.IO.Directory.GetFiles(path, "*.wdp")
            Dim image As BitmapDecoder = BitmapDecoder.Create(New Uri(s), BitmapCreateOptions.None, BitmapCacheOption.None)
            If image.Frames(0).Thumbnail IsNot Nothing Then
                Dim imm As New Image
                imm.Source = image.Frames(0).Thumbnail
                listView1.Items.Add(imm)
            End If
        Next
    End Sub
L'image utilisée pour le test (à mettre dans c:\test\ )
http://processpc.info/images/test.jpg (100 x 100 pixels)