2010-12-10 63 views
3

Existe-t-il un moyen de tester les pixels de caractères dans wpf? Je veux être en mesure d'obtenir un hit pour le point du personnage 'i' mais ne reçois pas un coup quand je clique sur l'espace entre le point et la ligne de 'i'. J'ai essayé de le faire en utilisant la méthode DrawingContext.DrawText et mais lorsque je clique sur le DrawingVisual résultant, qui contient le texte, en utilisant la méthode VisualTreeHelper.HitTest, il ne différencie pas l'espace et les pixels noirs du caractère. Il donne un hit pour chaque point dans la boîte englobante d'un personnage. Y a-t-il un moyen de faire cela?WPF - Hit test Pixel rendu de caractères

Répondre

4

J'ai trouvé la solution. Pour ce faire, vous devez aller au niveau inférieur à GlyphRunDrawing. Utilisez le code here et remplacez GeometryDrawing par GlyphRunDrawing. Ensuite, obtenez le GeometryGroup, qui contient chaque caractère en tant que géométrie, et faites le test avec le code:

GeometryGroup ggroup = (GeometryGroup)((GlyphRunDrawing)drawing).GlyphRun.BuildGeometry(); 
if(ggroup.FillContains(pt)) 
{ 
    Debug.WriteLine("Contains point " + pt.ToString()); 
}