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 Forms Discussion :

[VBNET] Besoin d'explication (scroll picturebox)


Sujet :

Windows Forms

  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 [VBNET] Besoin d'explication (scroll picturebox)
    Bonjour

    Il y a quelques temps m'est venue l'idée de faire un petit visualiseur d'images en Vb Net.
    Seulement après quelques test j'ai abandonné pour des raisons de performances.
    Mettre une images dans un picture puis se deplacer dedans devenait de plus en plus difficile plus l'image etait grande et le déplacement n'etait plus fluide du tout.
    J'avais essayé un ScrollableControl (qui faisait tout tout seul), puis des H et Vscroll en redissinant en GDI+ juste le necessaire, mais rien n'etais bien terrible niveau perf.
    A partir d'image 1000 x 1000 c'etais déjà plus fluide.

    Seulement voila en faisant quelques test sur des ColorMatrix j'ai reussis à obtenir l'effet voulu completement par hasard, un scrolling très fluide sur de grandes images. Mais le probléme c'est que je ne comprend pas pourquoi !
    J'arrive à afficher et a déplacer des images de 8 000 x 8 000 pixels parfaitement fluidement (d'ailleurs j'aimerai bien tester des images plus grande mais .Net me retourne un System.OutOfMemoryException)

    Je suis arrivé à cela en créant simplement un Bitmap (je charge une image de 8000x8000) que je met dans un picturebox.
    Ensuite ce qui permet d'accelerer je ne sais comment, je créer une 2éme image vide, puis un graphics sur cette 2éme image, ensuite je créé un Color matrix et je dessine avec le graphics dans l'image2 l'image 1 avec le colormatrix.
    Je dispose le graphics, et la 2éme images et de suite le scrolling est parfaitement fluide !

    Il semble bien y avoir un rapport avec le colormatrix car si avec le graphics de l'image2 je dessine simplement l'image 1 sans colormatrix ca n'a pas d'effet.

    Je voudrai donc savoir si quelqu'un pouvais m'expliquer ce comportement étrange ?
    Je peux fournir l'application/code si besoin.

  2. #2
    Membre confirmé Avatar de cacalex
    Inscrit en
    Avril 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 54
    Par défaut
    Alors code/application car besoin

  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
    Dans le zip joint le projet avec Code et application, c'est du vb express 2005

    Sinon voila le code.
    Le premier bouton charger une image dans le picture box

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim ouvrir As New OpenFileDialog
    ouvrir.Filter = "Toutes les images |*.bmp;*.jpg;*.gif;*.png|Fichier Bitmap (*.bmp)|*.bmp|Fichier Jpeg (*.jpg) |*.jpg|Fichier Gif (*.gif) |*.gif|Fichier PNG (*.Png) |*.png"
     
    If ouvrir.ShowDialog = Windows.Forms.DialogResult.OK Then
     
                Dim img As Bitmap = Image.FromFile(ouvrir.FileName, False)
                PictureBox1.Image = img
     
    End If
    ouvrir = Nothing

    Ensuite on peux scroller dans le picture box, si c'est une grande image ça rame.

    On appuie sur le 2éme bouton et la c'est fluide :

    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
     
    Dim bm As Bitmap = New Bitmap(100, 100)
    Dim g As Graphics = Graphics.FromImage(bm)
     
    Dim cm As System.Drawing.Imaging.ColorMatrix = New System.Drawing.Imaging.ColorMatrix(New Single()() _
            {New Single() {1, 0, 0, 0, 0}, _
               New Single() {0, 1, 0, 0, 0}, _
               New Single() {0, 0, 1, 0, 0}, _
               New Single() {0, 0, 0, 1, 0}, _
               New Single() {0, 0, 0, 0, 1}})
     
     
    Dim ia As System.Drawing.Imaging.ImageAttributes = New system.Drawing.Imaging.ImageAttributes
            ia.SetColorMatrix(cm)
            g.DrawImage(PictureBox1.Image, New Rectangle(0, 0, 1, 1), 0, 0, 1, 1, GraphicsUnit.Pixel, ia)
    'on dessine n'importe quoi n'importe ou on s'en fout un peu
     
    g.Dispose()
    g = Nothing
    bm.Dispose()
    bm = Nothing
    Ensuite le Scrolling est parfaitement fluide même avec des images énormes.

    Pour le picturebox il a juste son SizeMode en autosize, et il se trouve dans un ScrollableControl qui lui a son autoscroll a true. (permet d'avoir des barres de scrolling automatiquement)
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé Avatar de cacalex
    Inscrit en
    Avril 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 54
    Par défaut
    Je jettes un oeil...

  5. #5
    Membre confirmé Avatar de cacalex
    Inscrit en
    Avril 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 54
    Par défaut
    C'est particulier...
    Je suis au travail, mais je vais regarder ça plus profondement ce soir...

  6. #6
    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
    Personne n'a d'explication ?

Discussions similaires

  1. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51
  2. [HTML] Besoin aide sur scroll et balise
    Par Kerod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 24/03/2005, 14h42
  3. [C#] J'aurais besoin d'explication
    Par Roach- dans le forum Windows Forms
    Réponses: 18
    Dernier message: 10/03/2005, 16h00
  4. Besoin d'explications sur float et l'élasticité !
    Par KneXtasY dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/01/2005, 15h15
  5. [Foreign Key] Besoin d'explication.
    Par Andry dans le forum Débuter
    Réponses: 4
    Dernier message: 28/05/2003, 11h34

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