2011-07-26 7 views
0

XML을 사용하여 서버에서 검색 한 파일에 문제가 있습니다.안드로이드 비트 맵 디코드 문제

비트 맵 (GIF)은 base64로 인코딩 된 다음 XML 내부에 문자열로 저장됩니다. 앱이이 문자열을 가져 와서 비트 맵으로 디코딩 한 다음 표시합니다.

대부분의 경우 정상적으로 작동하지만 때로는 BitmapFactory.decodeByteArray가 문제를 나타내지 않고 null을 반환합니다.

XML을 통해 실패한 파일 중 하나를 리소스로 복사했으며 반복적으로 작동합니다.

bMapArray = Base64Coder.decode(cd.image); // Decode the encoded string 
    bMap = BitmapFactory.decodeResource(getResources(), R.drawable.fail); 
    Log.e("config", bMap.getConfig().name()); 
    // shows RGB_565, decodes OK and will display 
    bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);   
    Log.e("config", bMap.getConfig().name());   
    // Null config and displays OK for some files, 
    // Fails decodeByteArray for the file matching the one used as a resource and some others 

나는 성공을 거두지 못한 채로 문제를 풀어 내려고 노력했다. 누구나 밝은 아이디어가 있습니까? 64 비트 enc/decode 프로세스에 문제가 있다고 받아 들여서 기쁩니다. 그러나 decodeByteArray에서 오류가 발생하지 않았는지 확실하지 않습니다.

건배,

마틴.

답변

0

저는 다양한 사이트에서 비트 맵을 다운로드하는 앱이 있습니다. 그 중 하나도 base64로 인코딩되지 않았습니다. 대부분의 경우 비트 맵은 decodeByteArray를 통과하지만, 매회 (예 : 기본 Facebook 프로필 아이콘) 나는 null을 반환합니다.

나는 무슨 일이 있었는지 알아 내려고 노력했으며 결국 decodeByteArray에서 GIF 처리의 버그라는 결론을 내 렸습니다.

여기에서 "android bitmap gif decodebytearray"를 검색하면 다른 사람들이 동일한 문제를 겪고 있다는 많은 힌트를 찾을 수 있습니다. 그러나 권한있는 버그 보고서를 찾지 못했습니다.

+0

흠 - 파일을 배열로 변환 한 다음 decodebytearray를 사용하여 다시 변환합니다. 그것은 여전히 ​​실패합니다, 그래서 나는 그것이 비난 squarley를 decodebytearray에 둔다고 생각합니다. 도청 전문가! 내가 어디에서 근원을 찾을 수 있는지 아는가? 나는 PNG를 시험해 볼 것이지만, 더 많은 서버 작업이 필요하다는 것을 의미한다. 'InputStream is = getResources(). openRawResource (R.drawable.fail); byte [] array = 새 바이트 [] {}; 시도 { \t \t \t is.read (array); \t \t} 캐치 (IOException이 전자) { \t \t \t // TODO catch 블록을 \t \t \t 전자를 자동 생성.printStackTrace(); \t \t bMap = BitmapFactory.decodeByteArray (array, 0, array.length); ' –

+0

PNG 및 JPG도 실패합니다! –

+0

http://code.google.com/p/skia/source/checkout에서 decodeByteArray 소스를 얻을 수 있습니다. – Torid

0

여기서 잘못 될 수있는 세 가지 매우 분명한 사항이 있습니다.

1) 이미지를 전송하기 전에 XML에 추가하는 방법은 - 제대로 인코딩 되 고 있는지 확인

2) 전송 프로세스가 - 전송 특히, 절단되지 않는 것을 버퍼로 확인 입력 스트림

3) XML에서 데이터 구문 분석이 수신되었습니다. 다시 문자열이 올바르게 구문 분석되는지 다시 확인합니다.

가장 가능성이 높은 후보는 전송입니다. 이미지의 크기가보고있는 결과에 영향을 줍니까? 데이터의 일부만 수신하면 실패합니다.