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