0

拡張されたFilterInputStreamからビットマップをデコードしようとしています。SKIAにデコード可能な画像を提供するには、画像データに対してオンザフライのバイト操作を実行する必要がありますが、SKIAはカスタムInputStreamを無視し、独自の入力ストリームの1つを初期化するようです...

テストアプリケーションを実行するときに、2 MBの大きなJPEGを読み込もうとすると、ObfuscatedInputStream.read([])から1回だけ呼び出されます。BitmapFactory.decodeStream()

私から取得した最初の16kbのデータからファイルの種類が決定されると、ファイルはObfuscatedInputStreamそれ自体のネイティブストリームを初期化し、そこから読み取り、入力ストリームの動作方法に加えたすべての変更を効果的にレンダリングします...

これが私の拡張FilterInputStreamクラスのバッファリングされた読み取り関数です。関数の上部にあるLog.dは1回だけ実行されます。

@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パラメータのポイントが何であるかを本当に知りたいです...

4

1 に答える 1

0

取り込んだ最初の 1024 バイトから実際の画像であることを検出できなかったことが判明しました。ファイルが実際の画像であることが検出されない場合は、残りをデコードする必要がないため、read[] のみが呼び出されます。一度。

于 2013-02-26T23:39:43.863 に答える