2013-01-25 1 views
5

나는 이것을 잠시 동안 지금까지 묻고있다. 나는 아주 큰 배경을 그리는이 게임을 만들고 있습니다. 하지만 문제는 (물론) 게임에 더 많은 요소를 넣을 때 OutOfMemory 예외가 발생합니다.OutOfMemory 예외 : 이미지를 압축하면 힙 크기가 줄어들 것입니까?

제가 물어 보았던 것은 힙 크기 할당을 줄이는 이미지 압축입니다. 예를 들어 내 PNG 배경 (픽셀 단위로 3000 x 3000)은 약 1.5MB입니다. 일련의 PNG 압축 (TinyPNG 및 PNGGuntlet과 같은 소프트웨어를 통해)을 수행 한 후 배경의 크기가 712KB로 크게 줄어 들었습니다. 여기 압축 된 이미지는 원래 크기와 동일합니다 (3000 x 2000).

원본 배경 크기 (1.5MB)에 대한 힙 크기 할당이 압축 된 (712KB) 것과 동일합니까?

+1

아주 좋은 질문입니다. 그래픽 시스템은 압축되지 않은 이미지가 화면에 그려지기 때문에 대답은 아마도 "예"이지만 확실하지 않습니다. 나는 1500을 1000으로 배경을 줄이려고 노력할 것이고, 메모리 소비가 네 번 떨어지는 지 확인해 볼 것이다. – dasblinkenlight

+0

예, 다른 모듈을 다 마자 마자 시도해 보겠습니다. 나는 이것에 대해 어떻게해야할지 모르겠다. 그러나 이미지 압축을 한 후에 게임의 FPS가 크게 증가했다. 그러나 힙 크기가 줄어들 었는지 확실하지 않습니다. – dabaerju

답변

1

대답은 예입니다. 압축 된 이미지와 압축되지 않은 이미지 모두 동일한 양의 메모리를 차지합니다. 궁극적으로 R, G, B (, A) 값의 그리드로 끝납니다.
GPU가 직접 지원하는 압축 형식 (예 : OpenGL 텍스처의 경우 S3TC 압축)을 사용하는 경우에만 메모리를 절약 할 수 있습니다.

압축은 디스크의 파일 크기와 파일을로드하는 데 필요한 IO 시간의 양을 줄입니다 (압축 해제 프로세스로 인해이 절약이 상쇄 될 수 있지만).

그러나 이미지를 ARGB_8888 (예 : RGB_565) 이외의 비트 맵 유형으로로드하면 비트 맵을 저장하는 데 필요한 메모리가 줄어들지 만 이미지의 품질은 떨어집니다.

+0

나는이 이미지들을 압축 한 후에도 OutOfMemory Exception을 계속 유지하는 이유에 대해 매우 의아하게 생각했다. 지금까지 압축은 화면의 성능을 향상시키고로드하는 데 걸리는 시간을 줄이는 것으로 나타났습니다. 그걸 정리 해줘서 고마워! 큰 힙 크기를 허용하거나 파일 크기를 줄이는 것 외에는 다른 방법이 없다고 생각합니다. – dabaerju

+1

이미지를 ARGB_8888 이외의 비트 맵 유형으로로드 할 수 있습니다 (예 : RGB_565 - 메모리의 절반 만 사용). –

관련 문제