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
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
MIDLET ET XMLMIDLET ET XML par hadassah
Cliquez pour lire la suite par hadassah
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|