2013-02-21 4 views
0

확장 된 FilterInputStream에서 비트 맵을 디코딩하려고합니다. 나는 SKIA에 디코딩 가능한 이미지를 제공하기 위해 이미지 데이터에 대해 직접 바이트 조작을 수행해야하지만 SKIA는 내 사용자 지정 InputStream을 무시하고 자체 사용자 중 하나를 초기화하는 것처럼 보입니다 ...왜 SKIA는 사용자 정의 FilterInputStream을 사용하지 않습니까?

테스트를 실행할 때 응용 프로그램, ObfuscatedInputStream.read([])에 2 메가 바이트 큰 JPEG 결과를로드하려고 시도하는 것은 한 번만 BitmapFactory.decodeStream()

그것은 파일의 유형은 자신의 기본 스트림을 초기화 내 ObfuscatedInputStream에서 검색 데이터의 첫 번째 16킬로바이트에서 결정되면처럼 보인다에서 호출되는 그것으로부터 읽고, 효과적으로 입력 스트림이 쓸모 없게 작동해야하는 방법에 대한 모든 변화를 렌더링합니다 ...

여기에 확장 된 FilterInputStream 클래스의 버퍼링 된 읽기 함수입니다. 함수 상단의 Log.d는 한 번만 실행됩니다.

@Override 
public int read(byte b[], int off, int len) throws IOException 
{ 
    Log.d(TAG, "called read[] with aval + " + super.available() + " len " + len); 
    int numBytesRead = -1; 

    if (pos == 0) 
    { 
     numBytesRead = fill(b); 
     if (numBytesRead < len) 
     { 
      int j; 
      numBytesRead += ((j = super.read(b, numBytesRead, len - numBytesRead)) == -1) ? 0 : j ; 
     } 
    } 
    else 
     numBytesRead = super.read(b, 0, len); 

    if (numBytesRead > -1) 
     pos += numBytesRead; 
    Log.d(TAG, "actually read " + numBytesRead); 
    return numBytesRead; 
} 

아무도이 문제가 발생하지 않았습니까? 내 원하는 동작을 얻는 유일한 방법은 SKIA 라이브러리의 일부를 다시 작성하는 것 같습니다 ... 네이티브 구현 자체 스트림을 초기화하는 경우 InputStream 매개 변수의 요점을 알고 싶습니다 ...

답변

0

처음 1024 바이트에서 실제 이미지를 감지 할 수 없다는 사실이 밝혀졌습니다. 파일이 실제 이미지라는 것을 감지하지 못하면 나머지는 디코딩하지 않으므로 읽기만 수행하면됩니다. [] 한 번 전화 했어.

관련 문제