2011-04-08 2 views
0

SD 카드에서 내 앱으로 많은 큰 이미지 (500PNG 파일)를로드해야합니다. 이미지를 비트 맵으로 변환하고 비트 맵 파일을 만들어야합니까? 나는 힙 크기를 조정하고 싶지 않습니다. SD 카드에서 이미지를 읽을 수있는 다른 방법이 있습니까?Android가 외부 저장소의 큰 이미지를로드합니다.

답변

0

앱의 이미지 내부 표현은 특정 형식 (png, bmp 등)의 이미지가 아닌 비트와 바이트의 모음입니다.

이미지가 BitmapFactory에 의해로드 될 때 이미지가이 내부 표현으로 변환됩니다.

빠르게 메모리가 부족합니다, 일반적으로 한 번에 모든 비트 맵을로드하는 것은 좋은 생각이 아니다 ...

+0

답변 해 주셔서 감사합니다. 당신은 절대적으로 옳습니다. 그러나 요구 사항 때문에 모든 이미지를 한번에로드해야합니다. – Maria

1

당신이보기에서 표시하는 경우에, 당신은에로드해야 기억 전체.

이미지의 크기는 언급하지 않았지만 포토 갤러리에서 수행하는 작업은 가비지 수집기가 아닌 경우 버릴 수 있도록 SoftReference의 목록을이 비트 맵에 보관하는 것입니다. 보이는 (즉, 그들을 표시하는보기가 버려지는 경우 - 실제로 이것이 발생하는지 확인하십시오. 예 : AdapterView 사용). 이 비트 맵을 게으른 로딩과 결합하면 좋을 것입니다.

+0

실제로 그들은 그렇게 크지 않습니다. 아마 5 MB. 하지만 그 안에는 imageviews (및 다른 위젯) 뷰 파기가 있습니다. 그래서 나는 갤러리를 사용할 수 없다. – Maria

+0

'ViewFlipper'가 어떻게 내부적으로 작동하는지 모르지만 이미지에 대한 강력한 참조를 보관하지 않으면'Drawable's은 "뒤집기"합니다. 그러면 괜찮습니다. – Matthias

0

이미지의 크기가 큰 경우 ImageView에로드하기 전에 크기를 조정해야합니다. 그렇지 않으면 한 장의 사진으로도 쉽게 메모리 부족 문제가 발생할 수 있습니다. 얼마나 많은 이미지를 동시에 표시하고 얼마나 크게 표시할지 모르겠습니다. 그러나 그들을 표시하기 전에 크기를 조정하는 것이 좋습니다.

는이 코드를 사용할 수 있습니다, 그것을 이미지 크기를 조정하고 표시하려면

내 안드로이드 프로젝트에서
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
    bitmapOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions); 

    //reduce the image size 
    int imageWidth = bitmapOptions.outWidth; 
    int imageHeight = bitmapOptions.outHeight; 
    int scale = 1; 
    while (imageWidth/scale >= screenWidth && imageHeight/scale >= screenHeight) { 
     imageWidth = imageWidth/2; 
     imageHeight = imageHeight/2; 
     scale = scale * 2; 
    } 

    //decode the image with necessary size 
    fileInputStream = new FileInputStream(cacheFile); 
    bitmapOptions.inSampleSize = scale; 
    bitmapOptions.inJustDecodeBounds = false; 
    imageBitmap = BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions); 
    ImageView imageView = (ImageView)this.findViewById(R.id.preview); 
    imageView.setImageBitmap(imageBitmap); 

, 나는 그것을 검토 할 내 HD 배경 화면의 크기를 조정하기 위해이 코드 조각을 사용하고 있습니다.

Android Save And Load Downloading File Locally

관련 문제