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.
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.