为什么我会得到一个“;“太大或太小”;调用Texture2D.GetData时出错

本文关键字:太大或太小 调用 Texture2D 出错 GetData 为什么 一个 | 更新日期: 2023-09-27 17:59:19

我需要快速保存图像,我使用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图像?有更好的方法吗?为什么不起作用?

为什么我会得到一个“;“太大或太小”;调用Texture2D.GetData时出错

您忘记添加Bit Depth,它通常是每个像素4个字节(每个像素1个字节:红色、绿色、蓝色、alpha)。您的数组应该是:1024 x 1024 x BitDepth

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

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

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