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 个字节:红色、绿色、蓝色、alpha)。你的数组应该是:1024 x 1024 x BitDepth

于 2014-04-22T17:02:27.740 回答
1

图片的格式是什么?每个像素有多少字节?

根据文档,当您传递给的数组的大小GetData太小而无法包含渲染目标的数据时,您会看到此错误。这似乎是这里的罪魁祸首,因为您正在分配 1024x1024 bytes。除非您使用该Alpha8格式,否则渲染目标中的每个像素可能会占用至少两个字节的空间。您需要确定渲染目标的每个像素使用了多少字节(Format例如,通过检查属性)。一旦你知道了,将你的1024 * 1024计算乘以那个值。

例如,1024 * 1024 * 3如果您知道渲染目标每个像素使用三个字节,则分配一个大小数组,等等。

于 2014-04-22T17:03:02.907 回答