将操纵后的图形绘制到另一个图形中。

3
我想把一个经过处理的图形绘制到另一个图形中:
// 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);

输出是具有背景图片的头部图片,但头部图片没有旋转。
我错过了什么?

如果你将此变换应用于gBackground对象,会发生什么呢?gBackground.Transform = matrix; - musefan
2个回答

3

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

但我不想旋转背景 - 我想旋转头部? - Marc
@Marc:它不会旋转背景。它告诉你用于绘图的图形对象,任何后续绘制的图像都将应用旋转。尝试一下,它应该可以工作。在这里查看更多信息 - musefan
哇,耶,它成功了!非常感谢 - 所以矩阵变换应用于所有后续gBackground.Draw...调用,对吗? - Marc
抱歉,刚才看到了你之前的评论。好的,明白了,谢谢! - Marc

1

如果您要使用特定的对象,则将转换应用于Graphics对象才有用。 您没有对变量gHead执行任何操作。 尝试将该转换应用于gBackground


但我不想旋转背景 - 我想旋转头部? - Marc
背景不会被旋转。应用转换后,任何绘制的内容都会被旋转,对于您的情况是图像 h - tafa
谢谢你,你说得也对,但我只能选择一个答案作为正确答案 - musefan 写的更多,所以我选择了他的答案 :) - Marc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接