2017-12-21 14 views
-1

, 그것은 에만 파일 크기 (높이 및 폭) 디코딩.
android는 크기 (높이 및 너비)를 어떻게 계산합니까?
전체 파일을 다운로드 한 다음 크기를 계산합니까?
InputStream에 메서드 avaliable()이 있지만 예상 크기 만 반환합니다.
이 작업의 내부 작업을 알고 싶습니다.이미지 크기가 네이티브/내부적으로 어떻게 계산됩니까? 우리가 <code>BitmapFactory.decodeStream</code> 방법 <code>inJustDecodeBounds=true</code>와 <code>Options</code>를 통과하면

+0

내가 왜 투표를했는지 이유를 알 수 있습니까? ( –

답변

0

java 응용 프로그램에서 decodeStream 메소드를 호출하면 InputStream 유형을 기반으로하는 기본 디코딩 구현에 대한 호출이 호출됩니다. public static Bitmap decodeStream(InputStream is, Rect outPadding, Options opts)here을 참조하십시오. 옵션은 디코딩을위한 서명 static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding, jobject options)에 기본 디코더 구현에 전달됩니다

, see here.

더 코드를 검사, 당신이 볼 것이다 옵션 inJustDecodeBounds=true, 부울 onlyDecodeSize은 doDecode 방법에 true로 설정된 경우 . 디코딩 방법은 모든 크기 메타 데이터가 추출 될 때까지 스트림을 처리합니다. 이 시점에서 널 포인터를 반환하여 이미지 메타 데이터에는 액세스 할 수 있지만 전체 이미지에는 액세스 할 수 없습니다.

+0

어디에서 스트림에서 메타 데이터를 추출하는 코드입니까? –

+0

cpp 파일의 298 행에서 스트림을 처리하기 위해 코덱을 사용하여 너비와 높이가 저장됩니다. Skype 객체에서 코덱은 283에서 입력 스트림에 대한 포인터로 초기화됩니다. – sparkplug

+0

이미지 파일 (png/jpeg/etc.)이므로 스트림에서 크기에 대한 정보가 포함 된 이미지 헤더가 있습니다. 이전에 스트림을 정상 스트림으로 간주하여 입력 스트림을 통해 크기가 계산되는 방법을 궁금해했습니다. –