Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Rotations sur des images en VBA Access
Lors des deux volets précédents, nous avons appris à manipuler des
fichiers d'images en
VBA Access. Nous sommes parvenus à récolter leurs
propriétés et à leur infliger des
redimensionnements à la volée. Ici, nous allons voir qu'il est aussi possible de les
faire pivoter en leur soumettant des angles de rotation à respecter.
Base de données Access à télécharger
Pour poursuivre les travaux, nous avons tout d'abord besoin de récupérer la
base de données de la
visionneuse d'images au dernier indice.
- Télécharger le fichier compressé rotations-images.rar en cliquant sur ce lien,
- Le décompresser dans le dossier de votre choix,
- Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access,
- Cliquer sur le bouton Activer le contenu du bandeau de sécurité pour libérer les ressources,
- Dans le volet de navigation sur la gauche, double cliquer sur le formulaire intitulé visionneuse,
- Sur le formulaire, cliquer sur le bouton matérialisé par l'icône d'une loupe,
- Dans la boîte de dialogue qui suit, ouvrir un dossier contenant des images,
- Puis, valider par le bouton Ok pour revenir sur le formulaire de la visionneuse,
Comme vous pouvez le voir, les
photos du dossier sont automatiquement récoltées. La première s'affiche en grand au centre de la visionneuse. Les suivantes apparaissent en miniatures dans une barre latérale. Leurs
propriétés respectives sont chaque fois résumées dans la barre horizontale, placée dans la partie inférieure du formulaire.
Sur la droite du formulaire, vous notez la présence de deux zones. Elles sont intitulées
Retailler et
Rotation. La première a fait l'objet du développement précédent. Elle permet de définir les
nouvelles dimensions à attribuer à l'image en cours de lecture sur le formulaire.
La seconde est celle qui nous intéresse ici. Elle doit permettre de
faire pivoter la photo en fonction d'un
angle à préciser dans la zone de saisie prévue à cet effet.
La procédure VBA
Notre première cible consiste à créer la procédure de code à déclencher
au clic sur le bouton intitulé
Tourner. Il est placé sous la zone de saisie qui se nomme
angle.
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans les propositions, choisir le mode Création,
- Sur le formulaire en conception, cliquer sur le bouton Tourner pour le sélectionner,
- Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton associé à son événement Au clic,
- Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous basculons dans l'
éditeur de code VBA Access entre les bornes de la
procédure événementielle tourner_Click.
Le
code VBA que nous avons développé lors du précédent chapitre permet déjà de manipuler les images et de leur appliquer des opérations de transformations, des filtres. En conséquence, celui que nous devons produire ici est très similaire. Il est seulement question de lui apporter quelques légères retouches.
- Sélectionner tout le code VBA placé entre les bornes de la procédure transformer_Click,
Elle est normalement placée juste en-dessous de celle que nous nous apprêtons à implémenter.
- Copier ce code (CTRL + C),
- Puis, le coller (CTRL + V) dans la procédure tourner_Click,
Private Sub tourner_Click()
Dim objImg As Object: Dim imgOp As Object
Set objImg = CreateObject("WIA.ImageFile")
Set imgOp = CreateObject("WIA.ImageProcess")
imgOp.Filters.Add imgOp.FilterInfos("Scale").FilterID 'Opération de redimensionnement
imgOp.Filters(1).Properties("MaximumWidth") = nLarge.Value 'Filtre Largeur
imgOp.Filters(1).Properties("MaximumHeight") = nHaut.Value 'Filtre Hauteur
objImg.LoadFile nom_dossier & "\" & nomF 'Chargement de l'image
Set objImg = imgOp.Apply(objImg) 'On applique le redimensionnement selon les valeurs saisies
Kill nom_dossier & "\" & nomF 'On détruit le fichier source pour le remplacer sans erreur et message
objImg.SaveFile nom_dossier & "\" & nomF 'On le sauvegarde sous le même nom
demarrage
End Sub
Dans ce code, nous déclarons deux objets pour instancier deux classes (WIA.ImageFile et WIA.ImageProcess). La première permet de manipuler les images. La seconde permet de lui appliquer des filtres (Filters). Ce que nous faisons dans dans la foulée pour le redimensionnement (Scale).
Faire pivoter les images
Ici, ce filtre n'est plus d'actualité. Nous devons remplacer ces trois lignes pour opérer une rotation.
- Remplacer ces trois lignes par les deux suivantes :
Private Sub tourner_Click()
Dim objImg As Object: Dim imgOp As Object
Set objImg = CreateObject("WIA.ImageFile")
Set imgOp = CreateObject("WIA.ImageProcess")
imgOp.Filters.AddimgOp.FilterInfos("RotateFlip").FilterID 'Opération de rotation
imgOp.Filters(1).Properties("RotationAngle") = angle.Value 'Angle de la rotation
objImg.LoadFile nom_dossier & "\" & nomF 'Chargement de l'image
Set objImg = imgOp.Apply(objImg) 'On applique le redimensionnement selon les valeurs saisies
Kill nom_dossier & "\" & nomF 'On détruit le fichier source pour le remplacer sans erreur et message
objImg.SaveFile nom_dossier & "\" & nomF 'On le sauvegarde sous le même nom
demarrage
End Sub
C'est le
paramètre RotateFlip de la
méthode FilterInfos qui indique la nature de la transformation. Et c'est ainsi, grâce à l'
argument RotationAngle de la
collection Properties de notre second objet que nous définissons l'angle de la rotation sur la valeur saisie par l'utilisateur dans la zone de texte.
Les lignes qui suivent ne changent pas. Nous chargeons l'image à transformer (LoadFile) en rappelant son chemin d'accès complet. Nous lui appliquons la rotation (Apply). Nous supprimons le fichier du disque (Kill) pour pouvoir le remplacer par l'image transformée et travaillée en mémoire (SaveFile).
- Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
- Le fermer en cliquant sur la croix de son onglet,
- Puis le rouvrir en double cliquant sur son nom depuis le volet de navigation,
- Cliquer alors sur le bouton à la loupe,
- Dans la boîte de dialogue, ouvrir un dossier contenant des images,
- Cliquer sur le bouton Ok pour revenir sur la visionneuse,
- Naviguer jusqu'à la photo à incliner,
- Taper un angle de 90 par exemple puis cliquer sur le bouton Tourner,
Au rechargement, vous remarquez dans les miniatures, l'inclinaison de l'image ainsi transformée. Les angles doivent être ronds (90, 180, 270, 360), soit un multiple de 90.