Je voudrais utiliser GDI + pour rendre une image sur un fil de fond. J’ai trouvé cet exemple sur la façon de faire pivoter une image à l’aide de GDI +, opération que j’aimerais effectuer.
private void RotationMenu_Click(object sender, System.EventArgs e) { Graphics g = this.CreateGraphics(); g.Clear(this.BackColor); Bitmap curBitmap = new Bitmap(@"roses.jpg"); g.DrawImage(curBitmap, 0, 0, 200, 200); // Create a Masortingx object, call its Rotate method, // and set it as Graphics.Transform Masortingx X = new Masortingx(); X.Rotate(30); g.Transform = X; // Draw image g.DrawImage(curBitmap, new Rectangle(205, 0, 200, 200), 0, 0, curBitmap.Width, curBitmap.Height, GraphicsUnit.Pixel); // Dispose of objects curBitmap.Dispose(); g.Dispose(); }
Ma question a deux parties:
Comment voulez-vous accomplir this.CreateGraphics()
sur un thread d’arrière-plan? C’est possible? Ma compréhension est qu’un object d’interface utilisateur est this
dans cet exemple. Donc, si je fais ce traitement sur un fil d’arrière-plan, comment pourrais-je créer un object graphique?
Comment puis-je ensuite extraire un bitmap de l’object Graphics que j’utilise une fois le traitement terminé? Je n’ai pas été en mesure de trouver un bon exemple montrant comment faire cela.
Aussi: lors de la mise en forme d’un exemple de code, comment append des nouvelles lignes? Si quelqu’un pouvait me laisser un commentaire expliquant que je l’apprécierais vraiment. Merci!
Pour dessiner sur un bitmap, vous ne voulez pas créer un object Graphics
pour un contrôle d’interface utilisateur. Vous créez un object Graphics
pour le bitmap à l’aide de la méthode FromImage
:
Graphics g = Graphics.FromImage(theImage);
Un object Graphics
ne contient pas les graphiques que vous dessinez, mais un outil pour dessiner sur une autre canvas, qui est généralement l’écran, mais il peut également s’agir d’un object Bitmap
.
Donc, vous ne dessinez pas d’abord et n’extrayez pas ensuite le bitmap, vous créez d’abord le bitmap, puis créez l’object Graphics
pour dessiner dessus:
Bitmap destination = new Bitmap(200, 200); using (Graphics g = Graphics.FromImage(destination)) { Masortingx rotation = new Masortingx(); rotation.Rotate(30); g.Transform = rotation; g.DrawImage(source, 0, 0, 200, 200); }