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
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 <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>
L'image utilisée pour le test (à mettre dans c:\test\ )
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
http://processpc.info/images/test.jpg (100 x 100 pixels)
Partager