02-09 12:16:51.531: ERROR/dalvikvm-heap(31715): 7864320-byte external allocation too large for this process.
02-09 12:16:51.531: ERROR/GraphicsJNI(31715): VM won't let us allocate 7864320 bytes
02-09 12:16:51.531: WARN/dalvikvm(31715): threadid=8: thread exiting with uncaught exception (group=0x4001d828)
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): FATAL EXCEPTION: Thread-10
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): at android.graphics.Bitmap.nativeCreate(Native Method)
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): at exam.ImageEditor.Edit$1.doRotate(Edit.java:290)
02-09 12:16:51.562: ERROR/AndroidRuntime(31715): at exam.ImageEditor.Edit$1$3.run(Edit.java:205)
02-09 12:16:51.574: WARN/ActivityManager(2437): Force finishing activity exam.ImageEditor/.Edit
어플리케이션 강제종료시 로그캣에 뜨는 메세지 입니다.
작은 사이즈의 이미지들은 grayscale, rotate 전부 잘 이루어 지는데,
큰 사이즈 이미지들은 전부 강제종료가 되네요
해결방법이 있을까요?
cWidth = proImage.getWidth();
cHeight = proImage.getHeight();
cStride = cWidth+(4-cWidth%4);
cImageData = new int[cStride*cHeight];
for(int y = 0; y < cHeight; ++y) {
for(int x = 0; x < cWidth; ++x) {
cImageData[y*cStride+x] = proImage.getPixel(x, y);
}
}
for(int y = 0; y < cHeight; ++y) {
for(int x = 0; x < cWidth; ++x) {
int color = cImageData[y*cStride+x];
double yy = (Color.red(color) + Color.green(color) + Color.blue(color))/3.0;
cImageData[y*cStride+x] = (int)Color.rgb((int)yy, (int)yy, (int)yy);
}
}
bmd = Bitmap.createBitmap(cImageData, 0, cStride, cWidth, cHeight, Bitmap.Config.RGB_565);
2560 x 1536 pixel 들은 전부 메모리 오류가 납니다.
메모리를 확보할 수 있는 방법이라던지,
이런 문제를 해결할 수 있는 방법이 있을까요?
해당 문제는 제한된 휴대폰 메모리에 비해 큰 이미지를 로딩하면서 메모리 부족현상으로 발생된 문제로 보입니다.
"초보 개발자님" 의 말씀과 같이 모바일이라는 제약사항에서 보면 성능보다는 리소스 우선으로 개발 컨셉을 잡는게 맞다고 생각됩니다.
우선 해당프로그램이 구동될 수 있어야 하니까요 ^^;
이미지의 퀄리티를 낮출 수 없다면 이미지 분할 로딩을 해서 그룹핑할 수 있도록 구조를 만들 수 있습니다.
다만 잦은 로딩이 있어야 하므로 성능 저하의 원인이 될 수 있습니다.
이미지 퀄리티를 낮추어도 상관없다면 원본 이미지를 수정하시거나 scaling을 해서 로딩 하실 수 있습니다.
관련 사항은 조금만 찾아봐도 큰 무리 없이 방법을 아실 수 있다고 생각됩니다.




PC에서 하는 식으로 하면 안됩니다.
해당 이미지는 과도하게 커서 오류가 나는 것으로 보입니다.
로딩할 때 크기를 줄이던지 다른 방법을 찾아보셔야 할 겁니다.