GDI +: comment rendre un object Graphics en bitmap sur un thread d’arrière-plan?

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:

  1. 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?

  2. 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); }