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

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 25 févr. 2008 à 15:13
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
12 sept. 2009 à 00:07
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
13 nov. 2008 à 22:48
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.
Utilisateur anonyme
4 mars 2008 à 14:28
@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
4 mars 2008 à 14:16
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
26 févr. 2008 à 14:49
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
Utilisateur anonyme
25 févr. 2008 à 17:52
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 18
25 févr. 2008 à 16:16
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 18
25 févr. 2008 à 15: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!
Rejoignez-nous