グラフィックス変換マトリックスのスケールに関係なく0.5mmの幅で描くペンを作成する必要があります。GDI +の非スケーリングペン
参考:サンプルコードはC++/CLIですが、C#を使用した回答は大歓迎です。
// 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);
(96 DPI)の画面上で動作するようには思えない...私にピクセル幅のペンを与えます。 PDFプリンタ(600 dpi)では、半インチよりはるかに厚いペンが私に与えられます。
私は間違っていますか? GDIで非スケーリングペンを作成する正しい方法は何ですか?
右isn'tタグのC# 。それはC++のように見えます – Jehof
これはC++/CLIですが、C#の回答は大歓迎です。 –
バンプ!凹凸の凹凸バンプ! –