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
Creer un webbrowser pour ecran tactile en vb net [ par joketoons ]
Bonjour,je vais faire tres simple en fait je chercher a developper un webbrowser pour vb net sur des ecrans tactiles.Ma premiere recherche est comment
VB.NET pocket PC : envoi requete POST [ par nicobsa ]
Bonsoir à tous, Après avoir pas mal parcouru le web, je reviens malheureusement bredouille, je vous explique ma situation, je suis en train de réali
VB.Net Programmer pour un Ipod Touch ? [ par MagDix ]
Bonjour à tous j'aimerais bien m'amuser à essayer de programmer sur un Ipod Touch. J'ai chercher un SDK pour installer pour VB.Net mais j'ai rien tro
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice CRéATION D'UNE BASE DE DONNéE SOUS SQL AZURECRéATION D'UNE BASE DE DONNéE SOUS SQL AZURE par junarnoalg
Sans rentrer dans les détails, je me propose ici de faire un rapide tour de ce que propose SQL Azure.
SQL Azure est avant tout un service d'hébergement de base de données relationnelles construit sur SQL Server. Il permet aux entreprises d...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|