mon code ci-dessous est censé afficher N lignes par pouce. Au lieu de cela, je reçois un peu plus de N lignes par pouce. la distance entre les lignes est un peu plus petite. De plus, en changeant la résolution de l'écran, la distance entre les lignes change également. Est-ce que quelqu'un sait comment gérer cela?comment dessiner N lignes par pouce?
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace MyApp
{
class MyControl : Control
{
private readonly ContainerVisual container = new ContainerVisual();
private readonly DrawingVisual drawing = new DrawingVisual();
private void RenderDrawing()
{
var s = PresentationSource.FromVisual(this);
var dpiX = 96 * s.CompositionTarget.TransformToDevice.M11;
var dpiY = 96 * s.CompositionTarget.TransformToDevice.M22;
double N = 1;
using (var c = drawing.RenderOpen())
{
var p = new Pen(new SolidColorBrush(Colors.Black), 1);
for (int i = 0; i < 10; i++)
{
var x = i * dpiX/N;
c.DrawLine(p, new Point(x, 0), new Point(x, 100));
}
}
}
protected override Size ArrangeOverride(Size s)
{
RenderDrawing();
return s;
}
protected override Visual GetVisualChild(int index)
{
return container;
}
protected override Size MeasureOverride(Size s)
{
return new Size();
}
protected override int VisualChildrenCount
{
get { return 1; }
}
public MyControl()
{
container.Children.Add(drawing);
AddVisualChild(container);
}
}
}
Je suppose que c'est juste un exemple de code, mais il semble que vous allez toujours dessiner 10 lignes. Pas N lignes par pouce. Je pourrais manquer quelque chose, mais je suis sûr que la boucle for de 0 à 9 va tirer 10 lignes. Aussi, vous devriez mettre le Pen dans une instruction using (en utilisant var p = new Pen ...) sinon vous finirez par perdre des handles GDI. – pstrjds
oui, c'est un exemple de code. oui il dessine dix lignes. il est supposé dessiner ces dix lignes de façon à ce qu'elles soient à 1/N pouce l'une de l'autre. – akonsu
D'accord, je voudrais peut-être modifier la question pour expliquer que, je l'ai lu que vous voulez N lignes par pouce et non 10 lignes avec une distance de 1/N entre eux. En fait, en relisant votre question, je suis un peu confus, vous dites que l'écart change à mesure que la résolution change, mais c'est exactement ce que vous voulez faire si vous voulez seulement 10 lignes avec une distance entre la résolution actuelle la distance change à mesure que la résolution change. – pstrjds