Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net GDI+;_.net_Graphics_Gdi+_Transform_Onpaint - Fatal编程技术网

.net GDI+;

.net GDI+;,.net,graphics,gdi+,transform,onpaint,.net,Graphics,Gdi+,Transform,Onpaint,我在windows窗体应用程序的图形上下文中绘制了许多图形对象。与ui元素进行了一些交互,其中呈现了路径,允许用户平移、缩放并设置缩放点的原点。我的问题是,是否可以在图形对象上设置一系列变换操作,如下所示 [1] 应用平移变换(将路径移动到缩放变换的原点) [2] 应用比例变换 [3] 应用平移变换(将路径移回正确位置) 似乎我只能对单个变换操作类型(平移、缩放等)进行排序,因此两个平移变换不会应用于正确的点(缩放操作的任一侧)。有办法做到这一点吗?或者,是否可以为缩放变换设置原点 我确实弄乱了

我在windows窗体应用程序的图形上下文中绘制了许多图形对象。与ui元素进行了一些交互,其中呈现了路径,允许用户平移、缩放并设置缩放点的原点。我的问题是,是否可以在图形对象上设置一系列变换操作,如下所示

[1] 应用平移变换(将路径移动到缩放变换的原点) [2] 应用比例变换 [3] 应用平移变换(将路径移回正确位置)

似乎我只能对单个变换操作类型(平移、缩放等)进行排序,因此两个平移变换不会应用于正确的点(缩放操作的任一侧)。有办法做到这一点吗?或者,是否可以为缩放变换设置原点

我确实弄乱了嵌套的GraphicsContainer,但它们似乎没有帮助

谢谢


最大值

是。你可以。使用矩阵对象


是的。你可以。使用矩阵对象

代码:

您可以使用矩阵变换GraphicPath或图形对象。

代码:

可以使用矩阵变换GraphicPath或图形对象

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;
}