ROTATION (RAPIDE) DE BITMAP (À 360°) EN PUR GDI

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
- - Dernière réponse : codures
Messages postés
2
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
12 septembre 2009
- 12 sept. 2009 à 00:07
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/45850-rotation-rapide-de-bitmap-a-360-en-pur-gdi

codures
Messages postés
2
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
12 septembre 2009
-
Salut Cirec,

Je te propose un petit test pour mieux comprendre la rapidité de cette fonction (PlgBlt).
Au lieu de charger un cube orné des nouilles, ou autres images de taille inferieure à 512x512, charge donc une photo faite avec un appareil photo numérique (disons une photo.bmp de 3500x2500 en pf24bit) et essaye de la tourner légèrement … Je te mets 10/10 pour la documentation et pour le code …

PS : N’essaye pas le Ctrl+Alt+Suppr, ça ne marche pas dans ces cas là.
informatixo
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
1 -
Merci beaucoup pour cette source qui est bien commentée et bien codée.

Je me tente à mettre une note car je vois que personne ne l'a encore fais. Je te mets 9 / 10 pour ne pas mettre 10 / 10.

J'apprécie particulièrement la clarté du code et la vitesse d'exécution de la rotation. Je ne connaissais pas PlgBlt mais je l'a place dans un coin de ma tête.

Merci et bonne continuation à tous.
cirec
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34 -
@Debiars:

je ne suis pas certain d'avoir bien compris ta demande.

Tu aimerais pouvoir enregistrer l'image dans une position (après rotation)

Dans ce cas :
Il faut savoir que peut importe l'angle de rotation

PntArray[0] <----- représente le coin supérieur gauche de l'image
PntArray[1] <------ représente le coin supérieur droit de l'image
PntArray[2] <------ représente le coin inférieur gauche de l'image

le coin inférieur droit est calculé automatiquement par PlgBlt

Donc en créant un Bitmap et en lui donnant des dimmensions suffisante (pour ne pas tronquer l'image) tu peux afficher/enregistrer le résultat avec :

PlgBlt(BMPDest.Canvas.Handle, PntArray, BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height, 0, 0, 0);
Debiars
Messages postés
285
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
11 février 2018
-
Salut Cirec,
Moi, j'aimerai bien récupérer dans un fichier le bitmap dans sa nouvelle position... Tel quel, je ne récupère qu l'image d'origine.

Même réfexion à drjerome qui en plus me rogne des parties d'image.

Cela me servirait bien pour redresser de quelques degrés des images scannées de traviole.

Pour la vitesse d'exécution, y a rien à dire, c'est --->

jp ofBiars
DRJEROME
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015
-
Bonjour

oui dans les fonctions GDI

il y a

"PlgBlt" et aussi "SetWorldTransform"


il y a un exemple que j'ai fait, si vous voulez le voir en tapant "JROD SetWorldTransform" sur google

A+

drjerome JROD
cirec
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34 -
ha ha ha ...

prenez un ticket ... et faites la queue ... lolll

Plus sérieusement,

pour mettre tout ça dans une fonction ... c'est pas un problème
pour choisir le centre de rotation ... c'est pas un problème
pour une rotation sur 3 axes ... c'est pas un problème (si Francky passe par ici il pourra le confirmer) j'avais fait il y a déjà longtemps de cela un cube avec 6 faces différentes qui tournait sur 3 axes.

par contre en ce qui concerne l'anti-aliasing je ne me suis jamais penché sur le problème

Je me suis efforcé à faire une source aussi simple que possible (à la portée de tous) et vous me demandez juste l'inverse ^^

Merci pour vos appréciations.
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 -
Oué!
Et puis 'faudrait que ça tourne selon les 3 axes avec un verso pour simuler une feuille de platane virevoltant dans le vent d'automne...
Merci Cirec.

lol
Génial !
Maintenant, je veux tout ça dans une fonction et pouvoir choisir le centre de rotation.
Et puis de l'anti-aliasing sur les bords siouplait ^^ si c'est possible ;-)
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 -
Salut,

J'aurais bien aimé disposer de ce source quand je faisais mon "cube tournant".
Ca m'aurait évité d'utiliser le l'asm sans rien y connaître. :)

Bravo Cirec!