2011-03-23 94 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

相關問題