J'ai besoin de créer un stylo qui dessine avec une largeur de 0,5 mm quelle que soit l'échelle de la matrice de transformation graphique. Voici ce que je suis en train de faire:Stylo sans échelle dans GDI +
Remarque: L'exemple de code est C++/CLI mais les réponses utilisant C# sont les bienvenues.
// assume that g is a Graphics object
int dpi = g->DpiX;
float dotsPerHalfInch = dpi * 0.5;
// to extract scale factor from the transformation matrix...
// create two points distant one unit apart...
array<PointF> ^points = gcnew array<PointF>{
PointF(0.0f, 0.0f), PointF(1.0f, 0.0f)
};
// transform them...
g->Transform->TransformPoints(points);
// get distance after transformation...
float dX = points[1].X - points[0].X;
float dY = points[1].Y - points[0].Y;
float distance = Math::Sqrt(dX * dX + dY * dY);
// reverse the effects of any scale factor in graphics transform
float penWidth = dotsPerHalfInch/distance;
Pen ^halfInchPen = gcnew Pen(Color::Black, penWidth);
ne semble pas fonctionner à l'écran (96 dpi) ... me donne un pixel de large stylo. Sur l'imprimante PDF (600 dpi), il me donne un stylo bien plus épais qu'un demi-pouce.
Qu'est-ce que je fais mal? Quelle est la bonne façon de créer un stylo sans mise à l'échelle dans GDI?
Le Tag C# droit isnt . Il ressemble à C++ – Jehof
C'est C++/CLI ... mais les réponses C# sont les bienvenues. –
Bump! Bumpity bumpity bump! –