1

我正在开发一组用于在 XNA 中创建游戏的应用程序。使用 Graphics.drawImage 我可以轻松地从 XNA texture2D 对象中绘制预览图像。

每个对象,例如Character、Map 等,都由一个部件列表组成,每个部件存储诸如位置旋转和纹理源等信息。下一步是渲染整个对象的预览,而不仅仅是一部分。

我该怎么办?我可以将 Graphics.drawImage 视为常规 XNA 绘图调用,并通过循环遍历列表并将每个项目按位置和顺序绘制到位图来将我想要的对象部分渲染为位图吗?还是每个 graphics.DrawImage 调用都会破坏它绘制的位图?

4

2 回答 2

2

这是你要找的吗?

   Bitmap bmp = new Bitmap(100, 100);
   Graphics g = Graphics.FromImage(bmp);
   g.DrawImage(Properties.Resources.Foo);
   Bitmap bar = Properties.Resources.Bar;
   bar.MakeTransparent(bar.GetPixel(0, 0));
   g.DrawImage(bar);

只要图像是透明的(您可以在运行时调用 Bitmap.MakeTransparent()),您就可以通过多次调用 DrawImage 对事物进行分层,而不会“破坏”位图。

于 2009-06-15T15:04:56.113 回答
0

听起来差不多。我有一组 Texture2D xna 对象,每个对象都存储其文件路径。使用 Image.FromFile() 我使用此路径创建 Image 对象,然后我需要使用 Graphics.DrawImage() 和描述该部分的 Rectangle 将图像的部分绘制到 Graphics 对象。从这里我可以按从后到前的顺序进行多次 g.DrawImage() 调用。

由于 Texture2D 和 Image 可以处理透明度,而且我的 tex 源都是 PNG 格式,我假设我可以使用 Image 类而不是 Bitmap 类,并且不必调用 MakeTransparent ,对吗?

于 2009-06-15T22:31:22.833 回答