2013-02-08 3 views
1

내 문제에 대한 간략한 요약 : 로컬 이미지 파일을 읽으려고합니다. 내 자산 디렉토리에 파일을 포함하고 자산으로 취급하면 모든 것이 잘 작동합니다. 그러나 외부 sd 카드에서 읽으려고하면 BitmapFactory.decode 스트림이 null을 반환합니다. .jpeg 및 .png 파일 모두에서 동일한 결과가 나타납니다.BitmapFactory.decodeStream은 로컬 파일을 읽는 중 NULL을 반환합니다.

File f = new File("/mnt/extSdCard/Maps/Colorado/Boulder.jpg"); 
InputStream isf = new BufferedInputStream(new FileInputStream(f.toString())); 

어느 경우에서의 InputStream가 전달됩니다

내가 자산 파일에서 InputStream를 얻는 방법이있다 : 나는이 자산 파일에서 InputStream를 얻는 방법

InputStream isa = context.getAssets().open("Boulder.jpg"); 

입니다 이 코드는 다음과 같습니다 (이 코드가 익숙하면 인터넷 예에서 빌려 왔습니다.)

this.decoder = BitmapRegionDecoder.newInstance(inputStream, false); 

tmpOptions.inJustDecodeBounds = true; 
Bitmap temp = BitmapFactory.decodeStream(inputStream, null, tmpOptions); 
setSceneSize(tmpOptions.outWidth, tmpOptions.outHeight); 

tmpOptions.inJustDecodeBounds = false; 
tmpOptions.inSampleSize = (1<<downShift); 
sampleBitmap = BitmapFactory.decodeStream(inputStream, null, tmpOptions); 

다시, 파생 된 자산 파일을 사용하여 InputStream, 모든게 잘 작동합니다. 반대로, sdCard 파일의 경우 첫 번째 호출 후에 outWidth 및 outHeight는 모두 -1이고 두 번째 이후에는 sampleBitmap이 null입니다.

나는이 문제에 대한 축을 감싸고 있으며,이 포럼을 탐색하고 제안 된 솔루션을 사용하지 않고 많은 시간을 보냈다. 필자는 파일의 두 버전을 모두 열어 위의 그림과 같이 InputStream을 작성한 테스트 코드를 작성한 다음 각 스트림의 내용을 읽고 각 바이트를 비교하여 동일하다고 판별했습니다.

같은 결과를 사용하여 다른 기기에서 코드를 사용해 보았습니다.

<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/> 

내가 자산이 동적으로 그렇게 모든 것을 포함하여 시스템에 파일을 추가 할 수있는 기능이 필요합니다 : 나는 현재 AndroidManifest를에 다음 버전 정보와 갤럭시 노트 II (안드로이드 4.1.1)에서 테스트하고 있습니다 옵션이 아닙니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

당신 수있는 간단한 사용

 BitmapFactory.decodeFile(file.getAbsolutePath(), tmpOptions); 

보다는

파일 F = 새로운 파일 ("/mnt/extSdCard/Maps/Colorado/Boulder.jpg"); InputStream isf = 새 BufferedInputStream (새 FileInputStream (f.toString())); BitmapFactory.decodeStream (inputStream, null, tmpOptions)

관련 문제