[英]Converting byte array into 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中將其繪制到屏幕的最有效方法是什么?
我的想法是做以下事情。
這是最快的方法嗎? 如果更有效,我還可以以不同的順序/格式存儲字節數組。 在draw()方法中進行循環是否有任何缺點? 在update()期間做它會更好嗎?
編輯:
我試圖在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()循環。
當然必須有一種更有效的方法來做到這一點?
根據字節數組更新的方式(可能值得注意),您可以使用使用索引和計數參數的SetData重載來更新紋理的較小片段。
顯然,您需要添加一些跟蹤像素區域最后更改的方法(再次取決於程序的結構)。 在任何情況下,我最近都在另一個紋理上繪制了一個血液飛濺紋理,並且使用這種方法設法減少了命中率。
public void SetData(T [] data,int startIndex,int elementCount)
public void SetData(int level,Nullable rect,T [] data,int startIndex,int elementCount)
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.texture2d.setdata.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.