2011-03-23 84 views
1

是否可以使用StretchRectangle()将在一个设备上创建的曲面绘制到另一个设备上创建的曲面上?它是为两个不同的控件创建的两个设备。我不断收到InvalidCallException。两个表面都是渲染目标,格式相同,放置在默认池中。从一个设备到另一个设备的表面上的StretchRectangle

我想问题在于两种不同的设备?我怎样才能复制这个表面?

UPDATE:

我用LockRectangle和使用GraphicsStream读取和写入到另一个表面有一些更迭。我说一些成功,因为我注意到东西移动是可见的,但我还是要确定我有多少字节读/写和这样的,其矩形...

回答

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(); 
+1

那么,为什么不能像上面那样复制到另一个设备上的临时目标,然后拉伸这个临时的? – Goz 2011-03-25 09:48:31

+0

@Goz:现在我测试了在一台设备上缩小比例,然后复制它。我猜这两个工作,取决于你是否扩大或缩小,可能更适合限制需要由CPU复制的字节量。 – 2011-03-25 12:17:42

+0

非常真实。虽然值得注意的是,一个设备可能硬件加速,而另一个设备不是...... – Goz 2011-03-25 16:07:38

相关问题