ROTATION IMAGE AVEC GDI+ (EXEMPLES ET QUESTIONS)

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 13 oct. 2006 à 11:21
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 - 28 juin 2011 à 12:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39902-rotation-image-avec-gdi-exemples-et-questions

cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
28 juin 2011 à 12:51
Re,
Pas de réponse !! donc je m'y suis remis et finalement cela n'a pas été difficile.
A toutes fins utiles.. la fonction qui calcul le rectangle pour inscrire l'image.
w = la largeur de l'image et h la hauteur.
Private Type LaHa
L As Integer
H As Integer
End Type
Dim Retour As LaHa

Sub Rapport(ByVal w As Long, ByVal H As Long, Angle As Single)
Dim nAngle As Single
Dim rAngle As Single
Const Pi = 3.141593
Const Rad = Pi / 180
'Réduit l'angle à 90° si plus grand
If Angle = 360 Then
nAngle = 0
ElseIf Angle > 179 And Angle < 270 Then
nAngle = 90 - (270 - Angle)
Else
nAngle = IIf(Angle < 91, Angle, 90 - (Angle - (Int(Angle / 90) * 90)))
End If
'Traduit degrés en radiant
rAngle = Rad * nAngle
'retourne la largeur à donner au conteneur
Retour.L = Arrondi(((w * Cos(rAngle)) + (H * Sin(rAngle))), 0)
'retourne la hauteur à donner au conteneur
Retour.H = Arrondi(((H * Cos(rAngle)) + (w * Sin(rAngle))), 0)
End Sub

Public Function Arrondi(ByVal Nombre, ByVal Decimales)
Arrondi = Int(Nombre * 10 ^ Decimales + 1 / 2) / 10 ^ Decimales
End Function
A+
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
24 juin 2011 à 13:50
Bonjour tous,
> Mistern : voir ce snippet http://www.codyx.org/snippet_conversion-images-bmp-jpg-png-avec-gdi_160.aspx
> misterN : tu écrit, au début de ta modif..
'-- pour information un peu de trigo basique...
N'y aurait-il pas moyen de supprimer le "basique...", je m'explique, dans ton approche le calcul se fait pour avoir la possibilité d'inscrire l'image dans le "Gabarit" quel que soit l'angle de rotation.
J'ai étudié la trigono mais il y a tellement longtemps et je ne retrouve plus mes bouquins et j'aimerais faire en sorte que...
En un : l'image s'inscrire entièrement (le plus grand possible) dans le gabarit.
En deux : le gabarit s'adapterait à l'image en modifiant soit la hauteur soit la largeur pour qu'en finale les 4 coins de l'image touche les 4 côtés du gabarit.
Je sais qu'il faut employer Sinus et Cosinus mais je ne sais plus comment.
A l'occasion.. !
Merci d'avance.
A+
(10)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juil. 2010 à 19:20
yep, GDI+ permet ces sauvegardes
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
8 juil. 2010 à 19:09
Et si maintenant je veux enregistrer que l'image avec fond transparent en gif ou png est-ce que gdi me le permet? ou doit-on utiliser une autre procédure? Merci pour l'effort.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 déc. 2006 à 23:14
inutile de mettre

|Jpg|*.JPG|Ico|*.ICO

dans le filtre.

SavePicture enregistrera un BMP quoi qu'il arrive (quelque soit l'extension spécifiée)
fierobe Messages postés 14 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 3 août 2010
1 déc. 2006 à 22:28
Tu n'as qu'à essayer SATOR .
ajoute un common dialog controle que tu nomme dlg et créer un nouveau boutton de commande out u met le code :

dlg.Filter = "Bmp|*.BMP|Jpg|*.JPG|Ico|*.ICO"
dlg.DialogTitle = "ENREGISTRER SOUS"
dlg.ShowSave
SavePicture picSource.Image, dlg.FileName

et tu verra ensuite ...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 oct. 2006 à 00:01
on enregistre le rendu : l'image "tournée"
cs_Sator Messages postés 351 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 6 octobre 2010
16 oct. 2006 à 19:38
Hello, j'ai une petite question ....
Si on enregistre l'image, est-ce que l'on enregistre l'image de base ou est-ce que l'on enregistre l'image modifiée (après rotation). Ou est-ce que quelqu'un sais comment faire...
merci pour ce code sympat ...
merci pour d'avance pour vos réponses....
@+ Sator
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 oct. 2006 à 11:21
sympa...

gaffe au "Form1" qui traine dans ton code

pas compris pouquoi tu passes par le ClipBoard :
picTarget.Move Me.ScaleWidth - picTarget.width, 0
picTarget.Picture = picSource.Image
picTarget.Refresh
picTarget.Visible = True


Dommage que tu aies intégré le redimensionnement de tes pictureBox dans la function DrawImage, qui, du coup est moins réutilisable
Rejoignez-nous