[Swing] Ecrire une string en noir cerclé de blanc

Ecrire une string en noir cerclé de blanc [Swing] - Java - Programmation

Marsh Posté le 06-03-2012 à 16:11:03    

Salut les gens !
 
Je dois écrire du texte sur une image. Ce texte doit être lisible quelque soit le fond de l'image.
J'aimerais donc écrire mon texte en noir cerclé de blanc. Pour ceux qui ne voient pas trop de quoi je parle, c'est le rendu qu'on a avec les sous-titres de film (sauf que c'est plutôt du blanc cerclé de noir dans ce cas là).
 
Pour info, pour l'instant, j'écris mon texte en noir en utilisant le graphics de l'image.
 
Vous avez une idée de comment faire ça proprement et sans embarquer de police de caractère spécifique ?
 
Sur ce screen, on voit pas mal le cerclage que j'aimerais reproduire (mais en inversant les couleurs) :
http://www.dvdbeaver.com/film/DVDReviews24/a%20water%20deepak%20mehta/Cap1-Subtitle.jpg

Reply

Marsh Posté le 06-03-2012 à 16:11:03   

Reply

Marsh Posté le 07-03-2012 à 17:04:05    

J'ai trouvé une solution qui est un peu du bidouillage mais qui marche pas mal :

Code :
  1. g.setColor(Color.WHITE);
  2. g.drawString(s, x - 1, y);
  3. g.drawString(s, x + 1, y);
  4. g.drawString(s, x, y - 1);
  5. g.drawString(s, x, y + 1);
  6. g.setColor(Color.BLACK);
  7. g.drawString(s, x, y);
 

En gros, j'écris du blanc en décalé tout autour et j'écris du noir à la vraie place :)


Message édité par Fraisouille le 07-03-2012 à 17:04:24
Reply

Marsh Posté le 07-03-2012 à 17:29:33    

J'avais aussi fait un truc de ce genre, mais pas avec Swing, avec GDI+. La technique que j'avais utilisée, c'est de tranformer le texte en polygone et de faire un rendu de ce polygone avec une épaisseur de ligne décroissante (dans mon cas, l'épaisseur variait de 7 à 1), le tout avec un canal alpha fixe de 96/255 pour chaque tracé. Par-dessus le texte était écrit en noir.
 
Le résultat était passable, principalement parce que la police était assez petite à la base, mais au moins c'était lisible car écrit par dessus des images qui étaient souvent des bouillies de pixels multicolor.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed