我有一個表示圖像的字節數組。將字節數組轉換爲texture2D XNA
每個字節表示特定像素的R,G或B的強度值(0-255)。因此,對於640x480圖像,字節數組的大小爲640 * 480 * 3(每個像素有3個字節表示它)。
字節按像素順序排列。例如:
image[0] = the R value of x=0 y=0
image[1] = the G value of x=0 y=0
image[2] = the B value of x=0 y=0
image[3] = the R value of x=1 y=0
等等。
我想知道什麼是最有效的方式來畫這在XNA屏幕是?
我的想法是要做到以下幾點。
- 創建一個新的Texture2D對象
- 在draw()方法,通過字節數組迴路和Texture2D對象
- 畫出此填充在對象在屏幕上設置的值。
這是最快的方法嗎?如果效率更高,我還可以以不同的順序/格式存儲字節數組。在draw()方法中執行循環有什麼缺點嗎?在更新()期間執行它會更好嗎?
編輯:
我試圖在一個Texture2D使用使用setData()序每一次我的字節數組更新(通常一次幀)創建一個新的紋理。 fps現在低於15,而之前是60.代碼如下:
public static Texture2D getImageFrame(GraphicsDevice gd)
{
if (cameraTex == null)
{
cameraTex = new Texture2D(gd, 640, 480, false, SurfaceFormat.Color);
}
cameraTex.SetData(imageFrame);
return cameraTex;
}
這被稱爲每個draw()循環。
當然,必須有一個更有效的方法來做到這一點?
我強烈建議考慮在開發此應用程序時考慮使用Flyweight模式作爲設計模式。我認爲你的一個更大的挑戰將是在你的繪製/更新的每次迭代中以時間敏感的方式對這些數據進行總體檢索/存儲。 HTTP://en.wikipedia。org/wiki/Flyweight_pattern – 2012-03-19 18:40:09
在存儲字節數組方面,我沒有將它作爲一個對象傳遞。它是從另一個進程每幀更新,我正在尋找一種方法來將這些數據轉換爲每幀可繪製紋理2d。 – Jkh2 2012-03-19 18:55:47
然後你可能想用[SetData](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.texture2d.setdata.aspx)做些什麼。 – thedaian 2012-03-19 19:15:35