Simple rotation d'une image

Description

Le but ici est donc de faire pivoter une image dans un angle défini.
j'ai pas vraiment cherché sur le site, mais si il y a une autre solution, indiqué moi le lien.

Source / Exemple :


'
'Image Rotation v1.0 - par Nestor

'le but ici est de faire changer l'angle de position d'une image
'on commance par découper l'image en 4
'd'appliqué les nouvelles position
'puis de les regrouper pour en faire qu'une.
'(je pensais pas avoir autant de mal pour si peux)

Private Sub imagerotation(img1 As Control, img2 As Control, ByVal theta!) 'bé oui
  Const Pi = 3.14159265359 'valeur de Pi
  Dim c1x As Integer  'Centre de l'image1 X
  Dim c1y As Integer  'Centre de l'image1 Y
  Dim c2x As Integer  'Centre de l'image2 X
  Dim c2y As Integer  'Centre de l'image2 Y
  Dim a As Single     'Angle pour centrer l'img2
  Dim r As Integer    'Radiant du centre de l'img2
  Dim i1x As Integer  'Position de l'image1 "i1x" X
  Dim i1y As Integer  'Position de l'image1 "i1y" Y
  Dim i2x As Integer  'Position de l'image2 "i2x" X
  Dim i2y As Integer  'Position de l'image2 "i2y" Y
  Dim m As Integer    'Maximum de la hauteur et de la largeur de l'image 2

  'On commance à diviser par 2 en 4 partie (création donc de 4 img à partir d'une)
  c1x = img1.ScaleWidth / 2
  c1y = img1.ScaleHeight / 2
  c2x = img2.ScaleWidth / 2
  c2y = img2.ScaleHeight / 2

  'Création et recomposition de l'image
  '-------------------------------------------------
  m = img2.ScaleWidth
  If m < img2.ScaleHeight Then m = img2.ScaleHeight
  m = m / 2 - 1
  'déplacement
  For i2x = 0 To m
     For i2y = 0 To m
        'calcule des 4 prochainne nouvelles position
        If i2x = 0 Then
          a = Pi / 2
        Else
          a = Atn(i2y / i2x)
        End If
        r = Sqr(1 * i2x * i2x + 1 * i2y * i2y) 'multiplicateur
        
        'préposition
        i1x = r * Cos(a + theta)
        i1y = r * Sin(a + theta)

        'reconstitution de l'image en 4 parties
        c0 = img1.Point(c1x + i1x, c1y + i1y)
        c1 = img1.Point(c1x - i1x, c1y - i1y)
        c2 = img1.Point(c1x + i1y, c1y - i1x)
        c3 = img1.Point(c1x - i1y, c1y + i1x)
        'application et affichage
        If c0 <> -1 Then img2.PSet (c2x + i2x, c2y + i2y), c0
        If c1 <> -1 Then img2.PSet (c2x - i2x, c2y - i2y), c1
        If c2 <> -1 Then img2.PSet (c2x + i2y, c2y - i2x), c2
        If c3 <> -1 Then img2.PSet (c2x - i2y, c2y + i2x), c3
     Next
     'Ajoutez si dessous, "Afficher = DoEvents()" si vous voulez la voir ce recontruire toute seul
     'Afficher = DoEvents()
  Next
End Sub

Private Sub Command1_Click() 'c'est la que tout se joue
    Const Pi = 3.14159265359 'valeur de Pi
    angle = Pi / 6 'Pi et diviZé
    Image2.Cls 'actualise
    Call imagerotation(Image1, Image2, angle) 'affiche l'image terminé
End Sub

Conclusion :


pensez à mon nom si vous réutilisez ce code ;-)

Codes Sources

A voir également

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.