Pivoter un picturebox de 90 degrés instantanément (ou presque)

Soyez le premier à donner votre avis sur cette source.

Vue 7 839 fois - Téléchargée 676 fois

Description

Bon, alors voilà. Ceci est le premier code que je dépose, mais je me devais de le faire puisque j'ai honteusement pompé certaines fonctions dans une source de AntiSlash (http://www.vbfrance.com/article.aspx?ID=6541). Donc merci à lui.
Sinon ça sert juste à faire pivoter une image de 90 degrés vers la gauche ou vers la droite.

Source / Exemple :


Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long

Private Type BITMAPINFOHEADER
    biSize As Long
    biWidth As Long
    biHeight As Long
    biPlanes As Integer
    biBitCount As Integer
    biCompression As Long
    biSizeImage As Long
    biXPelsPerMeter As Long
    biYPelsPerMeter As Long
    biClrUsed As Long
    biClrImportant As Long
End Type
Private Type RGBQUAD
    rgbBlue As Byte
    rgbGreen As Byte
    rgbRed As Byte
    rgbReserved As Byte         'PS : si quelqu'un sait à quoi ça sert, je suis preneur
End Type
Private Type BITMAPINFO
    bmiHeader As BITMAPINFOHEADER
    bmiColors As RGBQUAD
End Type
Dim BMPINFO As BITMAPINFO
Dim BMPINFOH As BITMAPINFOHEADER

Private Buffer() As RGBQUAD     'tampon dans lequel on place l'image d'un PictureBox

'procédure pour placer l'image dans le tampon
'PichDC : hDC du PictureBox concerné
'PicImHandle : handle de l'image contenue dans le PictureBox
'x,y : Largeur et hauteur de l'image en Pixels
Public Sub PicToBuffer(PichDC As Long, PicImHandle As Long, x As Long, y As Long)
ReDim Buffer(x, y)
With BMPINFOH
    .biBitCount = 32        'profondeur de couleur
    .biHeight = y + 1       'on doit rajouter 1 parceque l'index commence à 0
    .biWidth = x + 1
    .biPlanes = 1           'PS : si quelqu'un sait à quoi ça sert, je suis preneur
    .biSize = Len(BMPINFOH)
End With
BMPINFO.bmiHeader = BMPINFOH

'on met les données du Bitmap dans le tableau
GetDIBits PichDC, PicImHandle, 0, y + 1, Buffer(0, 0), BMPINFO, 0
End Sub

'procédure pour afficher le tampon dans un PictureBox
'PichDC : hDC du PictureBox concerné
'PicImHandle : handle de l'image contenue dans le PictureBox
Public Sub BufferToPic(PichDC As Long, PicImHandle As Long)
Dim x As Long
Dim y As Long
'on prend les dimensions de l'image (et donc du tampon)
x = UBound(Buffer, 1)
y = UBound(Buffer, 2)
With BMPINFOH
    .biBitCount = 32
    .biHeight = y + 1
    .biWidth = x + 1
    .biPlanes = 1
    .biSize = Len(BMPINFOH)
End With
BMPINFO.bmiHeader = BMPINFOH
'on affiche...
SetDIBits pihdc, PicImHandle, 0, y + 1, Buffer(0, 0), BMPINFO, 0
End Sub

Conclusion :


En résumé, voilà ce qu'il se passe: vous chargez une image dans un PictureBox, puis lorsque vous voulez la faire pivoter, le prog la met dans un tampon mémoire (un tableau à deux dimensions) puis la fait pivoter. L'utilisation du tampon et la manipulation du tableau permet d'aller beaucoup plus vite qu'avec les fonctions standards.
Ca peut servir de base pour un prog de retouche d'images... Je crois...

Siouplait, soyez indulgent dans les commentaires, c'est ma première source.
Bonne prog.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_JcDuss Messages postés 37 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 23 avril 2004
7 août 2003 à 13:27
Justement je cherchais a faire ca, et les sources que j'avais pu voir jusqu'a maintenant n'etaient soit pas clair, soit trop lourdes a mettre en place.
Les deux subs(buffer) me plaisent bien ca me servira aussi pour autre chose.

Duss
gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
7 août 2003 à 15:36
Bijour,

Le c'est juste pour le nombre de couleur.

A++
[Gally Home Corp]
cs_clementpat Messages postés 406 Date d'inscription lundi 2 décembre 2002 Statut Membre Dernière intervention 25 janvier 2014
8 août 2003 à 15:17
salut a toi , programme tres bien commenté ,
mais il ne fonctionne pas chez moi .
quand je clic sur pivoter droite ou pivoter gauche , cela me reduit la picture box , et me cache simplement les AILES de la fille .
aucune rotation ! je suis sous vb6 entreprise et windows millenium !!!
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 4 août 2005
8 août 2003 à 15:28
->clementpat : Je pige pas ce qui peut se passer, tout fonctionne chez moi (avec la source que j'ai retéléchargé sur le site pour être sûr). Théoriquement, les API utilisées doivent fonctionner avec tous les Windows possibles et j'ai moi aussi VB6 entreprise.
Donc, là comme ça je saurais pas t'aider, désolé.

Bonne prog.
MoiOlivier.
cs_clementpat Messages postés 406 Date d'inscription lundi 2 décembre 2002 Statut Membre Dernière intervention 25 janvier 2014
9 août 2003 à 13:23
re . je l'ai testé sur XP ya pas de probléme , mais sur millenium cela ne marche pas . prob d'aspi sans doute .10/10 pour le code tres bien expliqué .

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.