2012-02-17 74 views
0

我只是想知道是否有人知道(性能明智的wp7)最好的方式來更新一個像素的WriteableBitmap像素...我可以看到Pixels.SetValue方法,可以採取一種顏色和一個地點。但可以肯定更快的選擇是先設置一個數組,那麼的SetValue(theArray)一次全部......這樣的事情...WriteableBitmap SetValue性能/ Texture2D SetData

Int32[] pixels = bmp.Pixels; 
for(Int32 y = 479; y > 0; y--) 
    for (Int32 x = 0; x < 480; x++) 
    { 
     pixels[x + (y * 480)] = 0; 
    } 
bmp.Pixels.SetValue(pixels); 

但犯規似乎是選擇???

objviously我在這裏只設置都爲黑色......但如果我想要做更多...

所以基本上,我只是問什麼是操作的最佳方式/創建由像素的位圖像素並獲得最佳性能? (想想每個打勾更新位圖)

編輯:我只注意到Texture2D.SetData <Int32>(theArray)有這個功能,任何人都可以評論這個表現嗎?或者可能推薦一個更好的方法來做到這一點?

+0

我不認爲位圖和卓越的性能。你想刷新60fps的整個屏幕? – Dykam 2012-02-17 11:56:08

+0

僅僅因爲你傳遞了一個數組,方法不會變得更快。 WriteableBitmap.Pixels只是一個數組,當您嘗試從WriteableBitmap生成實際圖像時完成處理。因此,將自己的所有值寫入像素數組中,或者調用將在像素數組中複製數組內容的方法的性能方面大致相同。 – 2012-02-17 12:31:23

+0

我改變了它稍微.. UpdateInterval設置爲TimeSpan(60000),我只是操作一個Int32 [] _pixels =新的Int32 [230400],並在繪製事件我只是調用myTexture2D.SetData (_pixels)它似乎很順利...我還沒有在設備上測試過它,但是... – Wacka 2012-02-17 12:31:23

回答

1

您可以創建一個給它一個字節數組的位圖。 Bitmap的一個構造函數允許這樣做。看看thisthis

因此,最好的方法是在一個數組上操作並在需要時創建一個位圖。但是,當然要繪製線條,圓圈等,您最好使用一些繪圖功能。

+0

啊很好,這將是有趣的,看看這是否更快比更新一個Texture2D(雖然我猜測創建一個新的位圖類每幀將佔用幾個週期?) – Wacka 2012-02-17 16:26:40

+0

其有趣的是,你可以使用IntPtr結構,但你不能使用不安全的代碼,因此不能創建指針在cla意義上的(即Int32 * myInt)在windows phone 7中 – Wacka 2012-02-17 16:30:14

+0

逐個像素地修改位圖會感覺非常慢。如果你想盡快做到儘可能簡單和原始的方法。找出最好的方法是運行一些測試。 – 2012-02-21 19:04:15