Simple rotation d'une image

Soyez le premier à donner votre avis sur cette source.

Vue 6 408 fois - Téléchargée 954 fois

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

Ajouter un commentaire

Commentaires

kilomaster
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
6 décembre 2006
-
ça déchire! 10/10
cs_epoc
Messages postés
87
Date d'inscription
mardi 28 mai 2002
Statut
Membre
Dernière intervention
25 octobre 2006
-
hey nestor : "indiqué moi le lien" c pas ton fort hein l'orthographe ! je mets 1, t trop mauvais en orthographe et c bien parce ke y'a pas 0 !
CaptainChoc
Messages postés
35
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
20 juin 2006
-
Cool ton code merci ca maide c juste c quil me fo je te met 10
cs_NiChaN
Messages postés
27
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
29 décembre 2008
-
c quoi ce depassement de capacité a cette ligne la ?
r = Sqr(1 * i2x * i2x + 1 * i2y * i2y) 'multiplicateur
comment resoudre ??
pk la rotation ne se fais pas sur elle meme ?
cs_NiChaN
Messages postés
27
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
29 décembre 2008
-
c quoi ce depassement de capacité a cette ligne la ?
r = Sqr(1 * i2x * i2x + 1 * i2y * i2y) 'multiplicateur
comment resoudre ??
pk la rotation ne se fais pas sur elle meme ?

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.