Afficher grande image picturebox

ipama7 Messages postés 2 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 7 février 2007 - 7 févr. 2007 à 18:18
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 - 21 mars 2007 à 22:00
bonjour,

Je souhaite afficher dans un picturebox une image de 6000*6000 que je construis à l'aide d'une succession de rectangles

En passant par un bitmap (Graphics.fromImage(bmp)) l'occupation memoire devient bcp trop importante donc trop long lorsqu'il fO deplacer le scrollbar.
En créeant un graphic depuis un picturebox, (picture.creategraphics), mon image disparaissait quand je deplacait le scrollbar .J'ai donc placer la construction de mon image dans la methode paint. Seulement la construction de l'image se fait à chaque fois et donc c'est aussi long à afficher lorsque je deplace le scrollbar.

Pour ameliorer le temps d'affichage, je souhaite construire uniquement la partie de l'image visible dans le picturebox seulement je ne sais pas comment connaitre les coordonnées de la partie de l'image à afficher.

Si qqun pE me proposer une solution je vous en remercie

3 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 févr. 2007 à 09:36
Je ne peux te proposer un code (je n'utilise pas VB.Net) mais des idées :

La 1ère et la plus simple siu cette proproété existe sous VB.Net : la propriété AutoRedraw à mettre à True . Ainsi : le 1er temps de chargement sera long (puisque ton image est grande) mais elle n'aura pas à être reconstituée à chaque fois au scroll

La 2ème est d'utiliser la fonction StretchBlt de l'Api de Windows pour ne dessiner que la partie que tu veux, en déterminant les coordonnées choisies sur l'image source et les coordonnées correspondantes de ta pictureBox. Si tu n'as pas à agrandir ou rapetisser l'image, tu peux par ailleurs utiliser tout simplement la fonction BitBlt de l'Api de Window au lieu de StretcBlt
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
8 févr. 2007 à 13:00
Bonjour

En .NET :

Tu définit tes 2 (je suppose Y et X) ScrollBars de 0 à TailleDeLimage-TailleAffichable


Const SizeX Taille en X des images sources


Idem pour Y


Ensuite, lors du dessin (dans Paint et la méthode derafraiichissement) :


'SizeX Taille en X des images sources

'ImageX Taille en X de la zone affichable

'ScrollX valeur de l'offset X (Value scrollBar)

'Idem pour Y


'Recherche des images à afficher (même partiellement)

Dim lImageStartX as integer =cint(math.floor(ScrollX/SizeX))

Dim lImageStartY as integer =cint(math.floor(ScrollY/SizeY))

Dim lImageEndX as integer =cint(math.celling(ScrollX+ImageX/SizeX))


Dim lImageEndY as integer =cint(math.celling(ScrollY+ImageY/SizeY))


'Déclaration des variables d'offset avec le décalage négatif des images en haut et à gauche

Dim lOffsetX as integer=(ScrollX mod SizeX)-SizeX

Dim lOffsetY as integer=(ScrollY mod SizeY)-SizeY


'Parcours des images à afficher

For ImgX as integer=lImageStartX to lImageEndX

    For ImgY as integer=lImageStartY to lImageEndY

       'Dessin de l'image

       pDestGraphics.DrawImage(mImages(x,y) _

            ,lOffsetX+(ImgX-lImageStartX)*SizeX, _

            lOffsetY+(ImgY-lImageStartY)*SizeY)

'pDestGraphics : Graphic de destination

'mImages : Tableau à 2 dim des images

'lOffset+(Img-lImageStart)*Size : permet de calculer le décalage pour l'affichage

    Next

Next


Il faut aussi ajouter un controle de dépassement du tableau.

Cet exemple est valable avec un tableau à 2 dimansions, mais tu peux l'adapter pour une seule.

Code tapé endehors de l'EDI, controles l'ordre des paramètres.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
0
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
21 mars 2007 à 22:00
0
Rejoignez-nous