0

Windowsフォームアプリケーションのグラフィックスコンテキストでプロットしているグラフィックスオブジェクトがいくつかあります。パスがレンダリングされるui要素との相互作用があり、ユーザーはズームポイントのパン、ズーム、および原点の設定を行うことができます。私が持っている質問は、次のようにグラフィックスオブジェクトに一連の変換操作を設定することは可能ですか?

[1]変換変換を適用します(スケール変換の原点にパスをシフトします)[2]スケール変換を適用します[3]変換変換を適用します(パスを正しい位置に戻します)

個々の変換操作タイプ(変換、スケールなど)しか注文できないようです。そのため、2つの変換変換は正しいポイント(スケール操作のいずれかの側)に適用されません。これを行う方法はありますか?あるいは、スケール変換の原点を設定することは可能ですか?

ネストされたグラフィックコンテナをいじりましたが、役に立たなかったようです。

ありがとう、

マックス

4

2 に答える 2

2

代替テキストhttp://lh6.ggpht.com/_1TPOP7DzY1E/S02rsQo3HgI/AAAAAAAAC60/l0rayOPKuoo/s800/Capture5.png

コード:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Bitmap bmp = new Bitmap(300, 300);
    Graphics g = Graphics.FromImage(bmp);
    System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();

    g.DrawString("this is a string", SystemFonts.DefaultFont,
        Brushes.Black, new Point(50, 50));

    matrix.Rotate(30); // or use RotateAt(...) specifying your rotation point
    g.Transform = matrix;
    g.DrawString("this is a 30 rotated string", SystemFonts.DefaultFont, 
        Brushes.Black, new Point(50, 50));

    matrix.Reset();
    matrix.Translate(50, 50);
    g.Transform = matrix;
    g.DrawString("this is a 50; 50 translated string", SystemFonts.DefaultFont, 
        Brushes.Black, new Point(50, 50));
    pictureBox1.Image = bmp;
}

Matrixを使用して、GraphicPathまたはGraphicsオブジェクトを変換できます。

于 2010-01-13T11:17:51.913 に答える
1

はい。あなたはできる。Matrixオブジェクトを使用します。

http://en.csharp-online.net/GDIplus_Graphics_Transformation%E2%80%94Matrix_Class_and_Transformation

于 2010-01-13T11:10:16.453 に答える