Mettre un fond derrière un texte dans une image

bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010 - 30 mai 2007 à 14:44
bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010 - 31 mai 2007 à 10:52
Bonjour à tous,

Tite question très simple je pense maisà laquelle je ne trouve pas de réponse :

"Peut-on mettre un fond (d'une couleur blanche par exemple) derrière un texte écrit avec DrawString sur une image?"

En fait, quelle que soit la couleur prise lorsque j'écris un texte sur mon image, on ne distingue pas assez les lettres dans certains endroits. Je voudrais donc simplement mettre un ti background blanc à mon texte afin de voir ce qu'il y a d'écrit en toute circonstance.

Mon code pour écrire sur mon image est le suivant :

g.DrawString("Salut",

new
Font(
"Tahoma", taillepolice,
FontStyle.Bold),
new
SolidBrush(
Color.Red), X , Y
);

Voilà, si vous connaissez l'arguement à rajouter pour mettre un fond blanc derrière ce texte, faites-moi signe svp ;)

Merci d'avance à tous

12 réponses

bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010
30 mai 2007 à 14:49
Ou bien, si vous savez comment faire un contour blanc autour des lettres de couleur... comme vous voulez si vous connaissez aussi ;)

Merci
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
30 mai 2007 à 15:08
Attends... j'ai ça en réserve... je poste ça dans les sources :)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
30 mai 2007 à 15:29
Voici la source : http://www.csharpfr.com/code.aspx?ID=42905

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010
30 mai 2007 à 15:41
waouhhhh !!merci bcp sebmafate!!

Mais ya vraiment pas plussimple juste pour faire les contours des lettres ou pour mettre un fond blanc derrière notre texte??

Car là ça fait vraimznt compliqué pour un novice comme moi en prog lol

Mais s'il n'y a vrament aucun moyen, je tenterais d'utiliser ça!

J'attend donc d'autres réponses encore qq temps et sinon je tenterai la tienne Sebmafate!

Mais c'est super sympa, vraiment merci!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
30 mai 2007 à 15:46
si si... il y a une autre solution... "plus artisanale"...

attends... je te fais ça !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010
30 mai 2007 à 15:48
C'est franchement super cool Sebmafate!

Moi je recherche rien d'extraordinaire lol, juste un contour blanc, sans effet aucun ;)

le truc le moins sophistiqué du monde quoi lol

T'es trop sympa!

Et là mon niveau a vachement augmenté en C# lol...alors imagines quand j'ai débuté, ya un mois lol
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
30 mai 2007 à 16:04
Essaye ce code : publicstaticImage DrawOutlinedText(string text, Font font, Color foreColor, Color lineColor, int lineWidth) {<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

    Bitmap retBitmap = null;

 

    using (Graphics g = Graphics .FromHwnd(IntPtr.Zero)) {

        Size sz = g.MeasureString(text, font).ToSize();

 

        using(Bitmap bmp = new Bitmap (sz.Width + 2*lineWidth, sz.Height + 2*lineWidth))

        using(Graphics gBmp = Graphics.FromImage(bmp))

        using(SolidBrush brLine = new SolidBrush (lineColor))

        using (SolidBrush brFore = newSolidBrush(foreColor)) {

 

            gBmp.SmoothingMode = SmoothingMode .HighQuality;

            gBmp.InterpolationMode = InterpolationMode.HighQualityBilinear;

            gBmp.TextRenderingHint = TextRenderingHint .AntiAliasGridFit;

 

            for (int i = 0; i < lineWidth * 2; i++)

            {

                for (int j = 0; j < lineWidth * 2; j++)

                {

                    gBmp.DrawString(text, font, brLine, new PointF ((float)i, (float)j));

                }

            }

            gBmp.DrawString(text, font, brFore, newPointF(lineWidth, lineWidth));

 

 

            retBitmap = (Bitmap)bmp.Clone();

        }

 

        return retBitmap;

    }

}

 

       
Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
30 mai 2007 à 16:05
grrrrr !!!!

public static Image DrawOutlinedText(string text, Font font, Color foreColor, Color lineColor, int lineWidth) {
    Bitmap retBitmap = null;


    using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)) {
        Size sz = g.MeasureString(text, font).ToSize();


        using(Bitmap bmp = new Bitmap(sz.Width + 2*lineWidth, sz.Height + 2*lineWidth))
        using(Graphics gBmp = Graphics.FromImage(bmp))
        using(SolidBrush brLine = new SolidBrush(lineColor))
        using (SolidBrush brFore = new SolidBrush(foreColor)) {


            gBmp.SmoothingMode = SmoothingMode.HighQuality;
            gBmp.InterpolationMode = InterpolationMode.HighQualityBilinear;
            gBmp.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;


            for (int i = 0; i < lineWidth * 2; i++)
            {
                for (int j = 0; j < lineWidth * 2; j++)
                {
                    gBmp.DrawString(text, font, brLine, new PointF((float)i, (float)j));
                }
            }
            gBmp.DrawString(text, font, brFore, new PointF(lineWidth, lineWidth));




            retBitmap = (Bitmap)bmp.Clone();
        }


        return retBitmap;
    }
}











Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
30 mai 2007 à 16:16
Je ne me moque pas, mais ça me rassure de voir que je ne suis pas le seul à qui ça arrive.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010
30 mai 2007 à 17:32
merci sebmafate!


 


Là j'ai plus le tpos d'essayer ta méthode mais je l'essaie dès demain matin et je te tiens au courant du résultat :D:D


Merci bcp bcp et à demain !!!


 


;)
0
bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010
31 mai 2007 à 10:13
Salut salut!

Alors je viens d'essayer ta technique et le souci c'est que ça marche pas car ça écrit pas SUR mon image actuele, ça en créé une autre...:(  et puis le truc c'est que le texte change selon les images, c'est pas fixe (je susi dans une boucle)

Au pire j'ai pensé à une solution mais j'arrive pas à la mettre en place :
- écrire mon texte normalement avec:

g.DrawString("Salut", new
Font(
"Tahoma", taillepolice,
FontStyle.Bold),
new
SolidBrush(
Color.Red), X , Y
);

- puis écrire le meme texte avec la meme police, la meme taille et au meme endroit mais avec seulement un mode "fil de fer" ou Pen, et non plus le solidbrush...

Ca écrirait donc par dessus mon texte en laissant l'intérieur nickel et en traçant juste les contous...

Cependant, je ne trouve pas comment écrire un texte avec un Pen...
0
bikini42 Messages postés 41 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 11 juin 2010
31 mai 2007 à 10:52
Bon, j'ai bidouillé une technique, pas très très belle niveau programation mais ça trace un rectangle blanc derrière mon texte lol, je vous la met ici pour info :

SizeF longueur = g.MeasureString(texte, new Font("Tahoma", taillepolice, FontStyle.Bold));

g.FillRectangle(new SolidBrush(Color.White),X, Y, longueur.Width, longueur.Height);

g.DrawString(texte, new Font("Tahoma", taillepolice, FontStyle.Bold), new SolidBrush(Color.Red), X, Y);

Et voilà les gens, ptetre que ça servira à quelqu'un un jour mais j'en doute vu le niveau de mon code...lol

En tout cas merci beaucoup à Sebmafate pour son aide précieuse ;)

A bientôt!!
0