카메라에서 가져온 비트 맵을 처리하는 경우 에이 필요합니다. 이미지의 크기에는 매우주의해야합니다.
카메라로 찍은 사진은 꽤 클 수 있습니다. 이미지를 비트 맵으로 열면 전체 배열이 메모리로로드됩니다. 5MP 카메라가 장착 된 Nexus One을 고려해보십시오. 기기로 촬영 한 사용자 사진은 2048x1536만큼 클 수 있습니다. 24 비트 픽셀 깊이를 사용하여 약 9MB에 대해 이야기하고 있습니다. 이것은 거대한인데 16/24 MB 힙 한계를 고려한 경우입니다.
솔루션 장치가 훨씬 낮은 해상도를 가질 것이기 때문에 일반적으로 전체 크기의 이미지가 필요하지 않습니다, 작은 크기와 함께 작업하는 것입니다, 플러스 ImageView
의 크기 (또는 다른면 당신은 비트 맵을 표시하는 데 사용할) 일반적으로 모든 화면을 차지하지 않습니다.
BitmapFactory.decodeByteArray(...)
(및 기타 공장 방법)은 을 통해 축척 비율을 지정할 수있는 BitmapFactory.Options
개체를 사용할 수 있습니다. 이렇게하면 원본 데이터에 영향을 미치지 않으므로 전체 크기 이미지를 유지하고 샘플 비트 맵을 메모리에 저장할 수 있습니다. 이전에 inJustDecodeBounds = true
을 사용하여 이미지 크기를 읽은 다음 이미지의 크기와 뷰포트의 크기에 따라 배율을 계산하고 마지막으로 배율 조정 된 비트 맵을 얻으십시오.
이 질문은 (하지 선택한 대답하지만, 높은 점수와 다른 두) 편리 할 수 있습니다 Strange out of memory issue while loading an image to a Bitmap object
편집 : 죄송합니다, 나는이 질문에 이미 대답했습니다 알고
데이터의 출처는 어디입니까? 네트워크입니까? 왜 그것을 메모리에 저장해야합니까? – aromero
aromero, 데이터는 카메라 및 이미지 리소스에서 가져옵니다. 나는 재고 이미지를 사용하고 사람들이 찍은 사진의 새겨 져있는 부분을 겹쳐서 사용하고 있습니다. 그래서 저는 메모리에있는 두 요소를 읽고 처리 할 수 밖에 없습니다. –