2010-10-24 5 views
1

La méthode standard de g.DrawString crée un arrière-plan gris. Donc, si vous superposez une autre chaîne sur le formulaire, une partie apparaît en gris.dessiner une chaîne avec un fond transparent en utilisant C#?

Ma question est, est-il possible de dessiner une chaîne avec un fond transparent? Je veux être capable de superposer des chaînes, mais être toujours capable de les voir.

Répondre

4

Etes-vous sûr?

Voici un tutoriel qui pourrait aider:
http://www.switchonthecode.com/tutorials/csharp-snippet-tutorial-how-to-draw-text-on-an-image

(modifier) ​​

Reprenez à partir de bases: Je viens de créer une nouvelle application de formulaires et changé le code dans Form1 à ceci:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.Paint += new PaintEventHandler(Form1_Paint); 

    } 

    void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawString("hello", new Font("Arial", 36), new SolidBrush(Color.FromArgb(255,0,0)), new Point(20,20)); 
     e.Graphics.DrawString("world", new Font("Arial", 36), new SolidBrush(Color.FromArgb(0,0,255)), new Point(30,30)); 

    } 

} 

Cela fonctionne comme prévu, avec un arrière-plan transparent pour le texte.

+0

Observer http://localhostr.com/files/c09365/Capture.JPG – user478636

+0

Je l'ai essayé moi-même, en traçant une chaîne sur une image en créant un fond gris. Cependant, dessiner sur un formulaire crée un fond gris – user478636

+0

Comment dessinez-vous les cordes? Publier votre code aiderait ... Dessiner sur du texte n'est pas différent de dessiner sur un bitmap - à GDI + ils sont tous simplement des pixels colorés par cette étape. Toutefois, si vous (par exemple) dessinez du texte sur une image bitmap et que vous copiez le bitmap dans le formulaire, ou si vous placez le texte dans un contrôle pour qu'il le rende pour vous, vous obtiendrez des résultats très différents. –

2

Ceci est impossible à diagnostiquer sans votre code d'enregistrement. Par défaut, Graphics.DrawString fait pas peindre l'arrière-plan. Ce formulaire exemple montre ceci:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     e.Graphics.DrawString("Underneath", this.Font, Brushes.Black, 0, 0); 
     e.Graphics.DrawString("Overlap", this.Font, Brushes.Black, 25, 5); 
     base.OnPaint(e); 
    } 
} 

Notez comment la chaîne « Overlap » ne supprime pas la chaîne « Sous ».

+0

Eh bien, j'ai découvert mon erreur, et c'était parce que je ne dessinais pas la chaîne à l'intérieur de l'événement epaint !. – user478636

+1

Oui, dessinez uniquement dans OnPaint ou l'événement Paint. S'il vous plaît, fermez votre discussion en marquant la réponse. –

Questions connexes