调用Texture2D.GetData时,为什么会出现“Too Large or Too Small”错误?

时间:2014-04-22 16:49:10

标签: c# xna texture2d rendertarget

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

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