2014-04-22 1 views
0

이미지를 빠르게 저장해야하며 이미지 저장 및로드가 너무 느리기 때문에 Texture2D.GetData 및 SetData를 사용하고 있습니다. 이미지는 1024x1024입니다.Texture2D.GetData를 호출 할 때 "너무 크거나 너무 작음"오류가 발생하는 이유는 무엇입니까?

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

가 나는 경우 ArgumentException 오류 얻을 : ". 전달 된 데이터의 크기가 너무 크거나이 리소스를 너무 작습니다"

그래서 1024x1024 이미지를 저장할 수 없습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 왜 이것이 효과가 없습니까?

답변

3

일반적으로 픽셀 당 4 바이트 (각각 1 바이트 : 빨강, 녹색, 파랑, 알파) 인 Bit Depth을 추가하는 것을 잊어 버리는 것입니다. 배열은 다음과 같아야합니다. 1024 x 1024 x BitDepth

1

이미지의 format은 무엇입니까? 한 픽셀 당 몇 바이트입니까?

documentationGetData으로 전달할 배열의 크기가 렌더링 대상 데이터를 포함하기에 너무 작은 경우이 오류가 표시 될 수 있습니다. 이것은 1024x1024 바이트을 할당 할 것이기 때문에 여기에서 가능한 범인 인 것 같습니다. Alpha8 형식을 사용하지 않는 경우 렌더링 대상의 각 픽셀은 , 최소 2 바이트의 공간을 차지할 가능성이 큽니다. Format 속성을 검사하여 렌더링 대상의 픽셀 당 몇 바이트가 사용되는지 계산해야합니다. 알고 계시면 1024 * 1024 계산 값에 해당 값을 곱하십시오.

예를 들어 렌더 타겟이 픽셀 당 3 바이트 등을 사용하는 경우 크기 배열 1024 * 1024 * 3을 할당하십시오.

관련 문제