2013-02-21 2 views
0

J'essaie de décoder un bitmap à partir d'un FilterInputStream étendu. Je dois effectuer une manipulation d'octets à la volée sur les données d'image pour fournir une image décodable à SKIA, mais il semble que SKIA ignore mon InputStream personnalisé et initialise l'un de ses propres ...Pourquoi SKIA n'utilise-t-il pas un FilterInputStream personnalisé?

Lorsque je lance mon test l'application, en essayant de charger dans un 2MB grand des résultats JPEG en ObfuscatedInputStream.read([]) appelé une seule fois de BitmapFactory.decodeStream()

il semble que, une fois le type de fichier est déterminé à partir de la première 16kb des données extraites de mon ObfuscatedInputStream initialisées son propre flux natif et lit à partir de cela, rendant effectivement toutes les modifications que je fais à la façon dont le flux d'entrée devrait fonctionner inutile ...

Ici est la fonction de lecture mise en mémoire tampon dans ma classe étendue FilterInputStream. Le Log.d en haut de la fonction n'est exécuté qu'une seule fois.

@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; 
} 

Est-ce que quelqu'un a déjà rencontré ce problème? Il semble que la seule façon d'obtenir mon comportement désiré est de réécrire des parties de la bibliothèque SKIA ... J'aimerais vraiment savoir quel est le point du paramètre InputStream si l'implémentation native initialise un propre flux ...

Répondre

0

Il s'avère qu'il n'était pas capable de détecter qu'il s'agissait d'une image réelle des 1024 premiers octets qu'il prend. S'il ne détecte pas que le fichier est une image réelle, il ne prendra pas la peine de décoder le reste. [] a appelé une fois.

Questions connexes