IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF] Creation de BitmapImage trop lent !


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 21
    Par défaut [WPF] Creation de BitmapImage trop lent !
    Bonjour,

    Je débute avec WPF.
    J'essaie de créer un petit browser d'image et je viens de me rendre compte que la création de bitmapimage est vraiment lente comparé au bitmap de GDI+.

    Voici le code en .net 2.0 :

    For Each path As String In System.IO.Directory.GetFiles("D:\Images\wall paper", "*.jpg")
    Dim strm As IO.Stream = New IO.FileStream(path, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
    Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(strm, False, False)
    Dim thumb As System.Drawing.Bitmap = img.GetThumbnailImage(250, 250, Nothing, System.IntPtr.Zero)
    img.Dispose()
    strm.Dispose()
    Next
    Ca prend 1340ms

    Si je fait la même chose en WPF :
    For Each path As String In System.IO.Directory.GetFiles("D:\Images\wall paper", "*.jpg")
    Dim img As New BitmapImage
    img.BeginInit()
    img.CacheOption = BitmapCacheOption.OnLoad
    img.CreateOptions = BitmapCreateOptions.IgnoreColorProfile
    img.UriSource = New Uri(path)
    img.DecodePixelWidth = 250
    img.EndInit()
    Next
    Ca prend 3600ms !


    Comment faire pour accélérer ça ? J'ai passé pas mal de temps à chercher, je n'ai pas trouvé d'information.

    Pour avoir une vitesse correcte je dois créer des bitmap que je convertis ensuite en bitmapimage (1540 ms) mais c'est pas très "propre"

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Essaye en rajoutant:

    RenderOptions.SetBitmapScalingMode(img, BitmapScalingMode.LowQuality);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 21
    Par défaut
    Merci d'avoir répondu

    J'ai déjà éssayé en ajouant renderOptions.SetBitmapScalingMode(img, BitmapScalingMode.LowQuality) et curieusement le temps est exactement identique.

    J'ai essayé de fournir un stream a la place d'une uri :
    img.StreamSource = New IO.FileStream(path, IO.FileMode.Open, IO.FileAccess.Read)
    Il me semble que ce soit un peu plus rapide mais à peine quelques ms.


    J'ai testé la même chose sous vista avec les dernier driver (au cas ou ce serait un problème de driver avec WPF), avec une Geforce 7600GS ça prenait exactement le même temps (quoique un peu plus lent)

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Et si tu essayes en virant:

    img.CacheOption = BitmapCacheOption.OnLoad

    ?

    Sinon, essaye aussi de passer par Image:
    http://msdn2.microsoft.com/en-us/lib...ols.image.aspx

    ou:
    http://msdn2.microsoft.com/en-us/lib...gedrawing.aspx


    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 21
    Par défaut
    Si je passe par Image ou ImageDrawing ce sera la même chose, ils prennent tout les 2 comme sources un bitmapimage.

    En fait je suis obligé de laisser img.CacheOption = BitmapCacheOption.OnLoad, car sinon le bitmapimage n'est chargé uniquement au moment voulu ce qui provoque des blocages de l'interface, mais ça prend autant de temps en réalité.

    En tout cas je m'étonne de ne trouver personne d'autre que moi qui trouve la creation de bitmapimage un peu lente oui alors je m'y prend pas comme il faut mais je vois pas comment faire autrement !

    J'ai essayé de passer aussi par un JpegBitmapDecoder pour la collection que j'ai utilisé c'était pas mieux il me semble.

Discussions similaires

  1. Convolution trop lente...
    Par progfou dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 05/08/2006, 11h44
  2. [Eclipse] Editeur de code trop lent
    Par Benzeghiba dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 10/11/2005, 14h02
  3. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo