拉伸从一个设备到另一个设备的表面上的矩形

时间:2011-03-23 23:56:25

标签: c# directx direct3d

是否可以使用StretchRectangle()将在一台设备上创建的曲面绘制到另一台设备上创建的曲面上?它是为两个不同的控件创建的两个设备。

我一直在InvalidCallException。两个表面都是渲染目标,具有相同的格式并放置在默认池中。

我认为问题出在两个不同的设备上?我该如何复制这个表面?

更新:

我使用LockRectangle并使用GraphicsStream读取和写入另一个表面,取得了一些成功。我说一些成功,因为我注意到某些移动是可见的,但我还是要确定要读/写的字节数等等,哪个矩形... < / p>

1 个答案:

答案 0 :(得分:0)

我相信这是不可能的。经过不断的实验,我能够复制一个有效的表面,但除了以下代码之外还有很多额外的工作要做。这只是实际的副本。

byte[] data = new byte[surfaceByteCount];
GraphicsStream sourceStream = sourceSurface.LockRectangle(area, LockFlags.ReadOnly);
sourceStream.Read(data, 0, data.Length);
sourceSurface.UnlockRectangle();

GraphicsStream targetStream = targetSurface.LockRectangle(area, LockFlags.Discard);
targetStream.Write(data, 0, data.Length);
targetSurface.UnlockRectangle();

device.Present();