0

画像をすばやく保存する必要があり、Texture2D.GetData と SetData を使用しています。単純に画像を保存して読み込むだけでは遅すぎるからです。画像は 1024x1024 です。

RenderTarget2D Image = ChunkContainer.GetImg(x, y);
byte[] imageBuffer = new byte[1024 * 1024];
Image.GetData<byte>(imageBuffer);
b.Write(imageBuffer);

ArgumentException エラーが発生します。

「渡されたデータのサイズが、このリソースに対して大きすぎるか小さすぎます。」

では、1024x1024 の画像を保存することはできませんか? これを行うより良い方法はありますか?なぜこれが機能しないのですか?

4

2 に答える 2

2

を追加するのを忘れていますBit Depth。これは通常、ピクセルあたり 4 バイトです (それぞれ 1 バイト: 赤、緑、青、アルファ)。配列は次のようになります。1024 x 1024 x BitDepth

于 2014-04-22T17:02:27.740 に答える
1

画像の形式は何ですか?1 ピクセルあたりのバイト数は?

ドキュメントによると、渡す配列のサイズGetDataが小さすぎてレンダー ターゲットのデータを格納できない場合に、このエラーが表示されます。1024x1024バイトを割り当てているため、これが原因である可能性が高いようです。この形式を使用していない限りAlpha8、レンダー ターゲットの各ピクセルは、少なくとも2 バイトのスペースを占有する可能性があります。レンダー ターゲットのピクセルごとに使用されるバイト数を把握する必要があります (Formatたとえば、プロパティを確認することによって)。それがわかったら、1024 * 1024計算にその値を掛けます。

たとえば、1024 * 1024 * 3レンダー ターゲットが 1 ピクセルあたり 3 バイトなどを使用することがわかっている場合は、サイズの配列を割り当てます。

于 2014-04-22T17:03:02.907 に答える