C# 将操纵图形绘制到另一个图形中

C# 将操纵图形绘制到另一个图形中,c#,gdi+,C#,Gdi+,我想将一个经过处理的图形绘制到另一个图形中: // I have two graphics: var gHead = Graphics.FromImage(h); var gBackground = Graphics.FromImage(b); // Transform the first one var matrix = new Matrix(); matrix.Rotate(30); gHead.Transform = matrix; // Write the first in the

我想将一个经过处理的图形绘制到另一个图形中:

// I have two graphics:
var gHead = Graphics.FromImage(h);
var gBackground = Graphics.FromImage(b);

// Transform the first one
var matrix = new Matrix();
matrix.Rotate(30);
gHead.Transform = matrix;

// Write the first in the second
gBackground.DrawImage(h, 200, 0, 170, 170);
输出为带有头部img的背景img-但头部img不旋转


我遗漏了什么?

仅当您要使用某个特定对象时,将变换应用于
图形
对象才有用。您没有对变量
gHead
执行任何操作。尝试将该转换应用于
gBackground

图形对象的
Transform
属性正是这个属性。它不采取任何行动,只告诉图形对象它应该如何绘制图像

因此,您要做的是在正在绘制的图形对象上设置
Transform
属性-在这种情况下,它应该应用于
gBackground
对象,如下所示

gBackground.Transform = matrix;
然后,当您在
gBackground
对象上调用
DrawImage
方法时,它将考虑您应用的
Transform
属性

请记住,此属性更改将在所有后续的
DrawImage
调用中保持不变,因此您可能需要在进行任何其他绘图之前重置它或更改其值(如果需要)


更清楚的是,您的最终代码应该如下所示

// Just need one graphics
var gBackground = Graphics.FromImage(b);

// Apply transform to object to draw on
var matrix = new Matrix();
matrix.Rotate(30);
gBackground.Transform = matrix;

// Write the first in the second
gBackground.DrawImage(h, 200, 0, 170, 170);

如果将变换应用于gBackground对象,会发生什么<代码>gBackground.Transform=矩阵但我不想旋转背景-我想旋转头部?背景不会旋转。应用变换后绘制的任何图形都将被旋转,在您的情况下,它是图像
h
。谢谢您,您也是对的,但我只能选择一个答案作为正确答案-musefan写了更多,所以我接受了他的回答:)但我不想旋转背景——我想旋转头部?@Marc:它不旋转背景。它告诉您用于绘制的图形对象,您绘制的任何后续图像都将应用旋转。试试看,它应该会起作用。哇,耶哈,成功了!非常感谢-因此矩阵变换应用于以下所有
gBackground.Draw…
调用,对吗?Ups,抱歉,请阅读您之前的评论。好的,没问题,谢谢!