画像を表すバイト配列があります。
各バイトは、特定のピクセルの 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() メソッド中にループを実行することの欠点はありますか? update() 中に実行したほうがよいでしょうか?
編集:
バイト配列が更新されるたびに (通常はフレームに 1 回) 新しいテクスチャを作成するために、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() サイクルごとに呼び出されます。
確かに、これを行うためのより効率的な方法が必要ですか?