从一个设备到另一个设备的表面上的StretchRectangle
问题描述:
是否可以使用StretchRectangle()将在一个设备上创建的曲面绘制到另一个设备上创建的曲面上?它是为两个不同的控件创建的两个设备。我不断收到InvalidCallException
。两个表面都是渲染目标,格式相同,放置在默认池中。从一个设备到另一个设备的表面上的StretchRectangle
我想问题在于两种不同的设备?我怎样才能复制这个表面?
UPDATE:
我用LockRectangle
和使用GraphicsStream
读取和写入到另一个表面有一些更迭。我说一些成功,因为我注意到东西移动是可见的,但我还是要确定我有多少字节读/写和这样的,其矩形...
答
认为这是不可能的。在继续进行实验后,我能够复制有效的曲面,但除了下面的代码外,还有许多额外的工作量。这只是实际的副本。
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();
那么,为什么不能像上面那样复制到另一个设备上的临时目标,然后拉伸这个临时的? – Goz 2011-03-25 09:48:31
@Goz:现在我测试了在一台设备上缩小比例,然后复制它。我猜这两个工作,取决于你是否扩大或缩小,可能更适合限制需要由CPU复制的字节量。 – 2011-03-25 12:17:42
非常真实。虽然值得注意的是,一个设备可能硬件加速,而另一个设备不是...... – Goz 2011-03-25 16:07:38