Accueil > > > ROTATION D'IMAGE POUR LE COMPACT FRAMEWORK
ROTATION D'IMAGE POUR LE COMPACT FRAMEWORK
Information sur la source
Description
Bonjour à tous et à toutes! ceci est juste une petite fonction en C# pour palier à l'absence de méthode de rotation d'image dans le Compact Framework,... dans un premier temps on va calculer la taille de l'image après rotation puis on applique un couleur d'arrière plan à la nouvelle image (ici on prendra arbitrairement la couleur du pixel (0,0) de l'image d'origine pour couleur d'arrière plan, et enfin on va chercher pour chacun des pixels de l'image finale le pixel correspondant dans l'image d'origine...
Source
- public static System.Drawing.Bitmap Rotate(System.Drawing.Bitmap ImageSource, int angle)
- {
- //Déclaration des variables utiles à la rotation
- System.Drawing.Bitmap RotatedImage;
- int i;
- int j;
- System.Drawing.Color couleur;
- int mx, my, mxdest, mydest;
- int bx, by;
- double angle_radian;
- double tcos;
- double tsin;
- double largeurdest;
- double hauteurdest;
-
- //calcul de l'angle en radian, ainsi que du cosinus et sinus de l'angle qui seront utiliser régulièrement
- angle_radian = -angle * Math.PI / 180.0;
- tcos = Math.Cos(angle_radian);
- tsin = Math.Sin(angle_radian);
-
- //calcul de la taille maximal de l'image après rotation (pour éviter de perdre des "morceaux d'image"
- largeurdest = Math.Ceiling(ImageSource.Width * Math.Abs(tcos) + ImageSource.Height * Math.Abs(tsin));
- hauteurdest = Math.Ceiling(ImageSource.Width * Math.Abs(tsin) + ImageSource.Height * Math.Abs(tcos));
-
- //Instanciation de l'image finale avec la taille calculer
- RotatedImage = new System.Drawing.Bitmap((int)Math.Ceiling(largeurdest), (int)Math.Ceiling(hauteurdest));
-
- //Calcul du centre de l'image source et de l'image après rotation (pour recentrer l'image)
- mxdest = RotatedImage.Width / 2;
- mydest = RotatedImage.Height / 2;
- mx = ImageSource.Width / 2;
- my = ImageSource.Height / 2;
-
- //On applique comme couleur d'arrière plan de notre nouvelle image la couleur du premier pixel de l'image d'origine (arbitraire)
- for (j = 0; j < RotatedImage.Height; j++)
- {
- for (i = 0; i < RotatedImage.Width; i++)
- {
- RotatedImage.SetPixel(i, j, ImageSource.GetPixel(0, 0));
- }
- }
-
- //rotation de l'image
- for (j = 0; j < RotatedImage.Height; j++)
- {
- for (i = 0; i < RotatedImage.Width; i++)
- {
- //On recherche les coordonnées du pixel i,j de la nouvelle image dans l'image source
- bx = (int)(Math.Ceiling(tcos * (i - mxdest) + tsin * (j - mydest) + mx));
- by = (int)(Math.Ceiling(-tsin * (i - mxdest) + tcos * (j - mydest) + my));
- if (bx >= 0 && bx < ImageSource.Width && by >= 0 && by < ImageSource.Height)
- {
- //On récupère la couleur du pixel bx,by de l'image source
- couleur = ImageSource.GetPixel(bx, by);
-
- //On recopie la couleur trouver dans le pixel correspondant
- RotatedImage.SetPixel(i, j, couleur);
- }
- }
- }
- return RotatedImage;
- }
public static System.Drawing.Bitmap Rotate(System.Drawing.Bitmap ImageSource, int angle)
{
//Déclaration des variables utiles à la rotation
System.Drawing.Bitmap RotatedImage;
int i;
int j;
System.Drawing.Color couleur;
int mx, my, mxdest, mydest;
int bx, by;
double angle_radian;
double tcos;
double tsin;
double largeurdest;
double hauteurdest;
//calcul de l'angle en radian, ainsi que du cosinus et sinus de l'angle qui seront utiliser régulièrement
angle_radian = -angle * Math.PI / 180.0;
tcos = Math.Cos(angle_radian);
tsin = Math.Sin(angle_radian);
//calcul de la taille maximal de l'image après rotation (pour éviter de perdre des "morceaux d'image"
largeurdest = Math.Ceiling(ImageSource.Width * Math.Abs(tcos) + ImageSource.Height * Math.Abs(tsin));
hauteurdest = Math.Ceiling(ImageSource.Width * Math.Abs(tsin) + ImageSource.Height * Math.Abs(tcos));
//Instanciation de l'image finale avec la taille calculer
RotatedImage = new System.Drawing.Bitmap((int)Math.Ceiling(largeurdest), (int)Math.Ceiling(hauteurdest));
//Calcul du centre de l'image source et de l'image après rotation (pour recentrer l'image)
mxdest = RotatedImage.Width / 2;
mydest = RotatedImage.Height / 2;
mx = ImageSource.Width / 2;
my = ImageSource.Height / 2;
//On applique comme couleur d'arrière plan de notre nouvelle image la couleur du premier pixel de l'image d'origine (arbitraire)
for (j = 0; j < RotatedImage.Height; j++)
{
for (i = 0; i < RotatedImage.Width; i++)
{
RotatedImage.SetPixel(i, j, ImageSource.GetPixel(0, 0));
}
}
//rotation de l'image
for (j = 0; j < RotatedImage.Height; j++)
{
for (i = 0; i < RotatedImage.Width; i++)
{
//On recherche les coordonnées du pixel i,j de la nouvelle image dans l'image source
bx = (int)(Math.Ceiling(tcos * (i - mxdest) + tsin * (j - mydest) + mx));
by = (int)(Math.Ceiling(-tsin * (i - mxdest) + tcos * (j - mydest) + my));
if (bx >= 0 && bx < ImageSource.Width && by >= 0 && by < ImageSource.Height)
{
//On récupère la couleur du pixel bx,by de l'image source
couleur = ImageSource.GetPixel(bx, by);
//On recopie la couleur trouver dans le pixel correspondant
RotatedImage.SetPixel(i, j, couleur);
}
}
}
return RotatedImage;
}
Conclusion
Ce code source est optimisable je pense mais en tout cas il est fonctionnel, n'ésitez pas à me signaler les éventuelles difficultés pour faire fonctionner ce code... Attention ce code n'a pas pour prétention de faire mieux que les méthode éxistantes dans le Framework 2.0 complet mais juste de pallier à l'absence de ces méthodes dans le CompactFramework...
Historique
- 08 août 2007 16:23:15 :
- Déplacement de la source sur http://www.pdafr.com/
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
RSS XML PPC [ par manu00 ]
Bonjour, je dois developper un lecteur de flux rss sur pocket pc mais je ne sais pas par ou commencer... Que me conseillez vous ? Visual Basic .net ou
vb.net Lancer un executable sur ppc [ par garocheb ]
Bonjour, Je suis un nouveau en vb.net et je n'arrive pas a trouver comment on peux lancer un executable se trouvant dans "\my documents\12.exe" Aidez
Recevoir infrarouge sur Smartphone ou PPC [ par azerty25 ]
BonjourJe voudrais faire un programme, de préférence en .NET, qui m'affiche les codes que le matériel reçoi par le port IR.Dans le
[.NET2 CF]IrCOMM et IrDA [ par NHenry ]
Bonjour,J'utilise un PPC, j'ai constaté que pour mes essais, j'ai 3 PPC pour mes tests, un seul a le port IrCOMM en COM2, les autres je ne sais pas.J'
.NET CF datagrid, changer la backcolor de certaines lignes [ par oo7jb5 ]
Bonjour à tous,Est possible de changer la backcolor / mettre en gras certaines lignes d'un datagrid (.NET CF), de la façon suivante :lst = new List<
Url encode [ par aurel16 ]
Bonjour, Après plusieurs heures de recherche sur le net, je ne sais pas comment Urlencoder une chaîne sous CF .net. Avec le framework .net j'utilisai
synthèse vocale [ par spilz ]
Bonjour à tous, je commence à programmer un peu en C# pour mon PPC sous wm6.5, et j'aimerai réaliser une application capable de lire un fichier texte
[déplacé VB. NET -> PDA] progressbar [ par byllu ]
Bonjour, savez vous comment faire pour pivoter une progress bar, afin de la mettre verticale, avec le 0 vers le bas de la feuille? Car j'ai regard
Gestion de fichier accès direct avec VB2008 sur Pocket PC [ par Ch_Collins ]
Bonjour à tous, C'est mon premier message et j'espère que ma question n'est pas idiote. J'ai 60 ans et j'ai, il y a longtemps programmé pour le plaisi
Modifier image VB.NET Compact Framework [ par rere62960 ]
Bonjour, Je veux créer un bouton sous la forme d'un contrôle utilisateur. Il y a donc une image de fond (BTN_ENFONCE) et une image au dessus (BTN_R
|
Derniers Blogs
[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7 par Audrey
L'émulateur Windows Phone 7, fourni avec la version Beta des outils développeurs n'inclut aucune image dans sa bibliothèque. Pas très pratique de tester son application lorsque l'on souhaite que l'utilisateur puisse choisir une image présente dans le télé...
Cliquez pour lire la suite de l'article par Audrey VIVE LES MOCKS ET LES POCOSVIVE LES MOCKS ET LES POCOS par vLabz
J'observe régulièrement autour de moi de la confusion à propos de ces deux termes et j'aimerais juste rappeler ce qu'ils signifient. Je ne suis bien sûr pas le mieux placé pour faire une leçon mais je vais faire de mon mieux pour mettre en valeur ce q...
Cliquez pour lire la suite de l'article par vLabz [WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5)[WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5) par JeremyJeanson
Vendredi dernier Microsoft a publié le quatrième épisode des bonnes pratiques pour coder ses activités custom dans WF4 : endpoint.tv - Workflow and Custom Activities - Best Practices (Part 4) . Tout comme pour les précédents épisodes, j'ai pris le temps d...
Cliquez pour lire la suite de l'article par JeremyJeanson DéVELOPPEMENT MOBILE : .NET COMPACT FRAMEWORK & LIMITATIONSDéVELOPPEMENT MOBILE : .NET COMPACT FRAMEWORK & LIMITATIONS par Pi-R
Introduction :
Le développement d'applications mobiles est quelque peu différent du développement d'applications sous Windows. En effet, le développement d'applications mobiles se base sur le .NET Compact Fra...
Cliquez pour lire la suite de l'article par Pi-R IPHONE VERSUS WP7 CODINGIPHONE VERSUS WP7 CODING par Nicolas
Je relais une présentation sur slideshare.net, qui compare le développement sur Iphone et Windows Phone 7, qui ma fait sourire. I phone versus windows phone 7 coding View more presentations from www.donburnett.com. J'aurais bien aimé une comparai...
Cliquez pour lire la suite de l'article par Nicolas
Forum
ECRAN ECRAN par calvine
Cliquez pour lire la suite par calvine
Logiciels
Xilisoft HD Vidéo Convertisseur 6 (6.0.3.0421)XILISOFT HD VIDéO CONVERTISSEUR 6 (6.0.3.0421)Xilisoft HD Vidéo Convertisseur est un outil professionnel de conversion HDTV, conçu pour transfo... Cliquez pour télécharger Xilisoft HD Vidéo Convertisseur 6 Xilisoft MP4 Convertisseur 6 (6.0.2.0415)XILISOFT MP4 CONVERTISSEUR 6 (6.0.2.0415)Xilisoft MP4 Convertisseur est un outil puissant pour la conversion de vidéo MP4, qui peut conver... Cliquez pour télécharger Xilisoft MP4 Convertisseur 6 Vade Retro Desktop (3.03)VADE RETRO DESKTOP (3.03)Le logiciel antispam Vade Retro pour Microsoft Outlook®, Outlook Express® et Windows Mail®(Vista)... Cliquez pour télécharger Vade Retro Desktop Malwarebytes Anti Malwares (1.46)MALWAREBYTES ANTI MALWARES (1.46)Malwarebytes' Anti-Malware est un anti-malware qui peut éliminer même les plus avancés des logic... Cliquez pour télécharger Malwarebytes Anti Malwares
|