6
votes

Qu'est-ce que mini_thumb_magic et comment l'utiliser?

Fond

J'ai remarqué une colonne étrange pour Mediastore.images.imagecolumns appelé " mini_thumb_magic ".

La documentation indique que:

Le mini-thumb ID.

Type: Integer

valeur constante: "mini_thumb_magic"

la question

Je suppose que ce champ est lié à MediaStore. Images.Thumbnails .

est-ce correct? Sinon, qu'est-ce que c'est et comment l'utilisez-vous?

Si c'est correct, j'ai d'autres questions qui lui sont liées:

  1. est-ce une image mini-taille de l'original? Utilise-t-il le même rapport d'aspect ou est-ce que cela dépassait-il?

  2. Comment se fait-il que la taille de "micro" est carré (96 x 96) et la taille de "mini" est un rectangle non carré (512 x 384)?

  3. Comment l'utilisez-vous? Je suppose que c'est que cela a fait en utilisant " Thumb_data ", qui est une blob, vous l'utilisez donc comme Ceci < / a>, mais alors quel est le but d'utiliser " GetThumbnail " Si vous avez déjà ce champ?

  4. obtient-il une vignette pivotée au cas où la valeur d'orientation n'est pas 0? Cela signifie que si je souhaite le montrer, je n'ai pas besoin de faire pivoter l'image?

  5. est-il possible de faire une requête des images avec leurs vignettes? Peut-être utiliser une jointure intérieure?

  6. est-il disponible pour tous les appareils et versions Android?

  7. Pourquoi est-ce même appelé "magie"? Est-ce parce qu'il est également disponible pour des vidéos (et pour une raison quelconque n'existe pas pour la musique, car il pourrait s'agir de la photo de couverture de l'album, par exemple)?


0 commentaires

3 Réponses :


2
votes

vérifier ce fichier: https: //github.com/android/platform_packages_providers_mediaprovider/blob/master/src/com/andrroid/providers/media/mediathtthumbequest.java dans le code source Android. Cette valeur est un nombre magique qui permet de déterminer si la vignette est toujours valide. Je n'ai pas étudié ce dossier plus loin, mais cela ne devrait pas être un problème de bit de plonger plus profondément. À vos questions:

  1. non, pas d'image mini-taille
  2. Eh bien, je suppose que c'est une définition de Google qui souhait avoir une vignette carrée pour certaines listes, où seuls les très petits aperçus devraient être visibles et où de nombreux articles doivent s'adapter à l'écran et il y a une autre vignette où les images sont plus grandes. ...
  3. Je ne sais pas que, mais selon le doc de Google, une (thumb_data) n'est que du tableau d'octet brut de la vignette (Dunno dans quel format) et l'autre (getThumbnail) récupère un objet bitmap à part entière. ..
  4. Je ne sais pas
  5. Je ne sais pas
  6. Je suppose que oui, comme cela fait partie du code source AOSP.
  7. Le mot "magie" est souvent utilisé pour une sorte d'identifiant. Il existe des "paquets magiques" qui peuvent réveiller un ordinateur de veille ou d'arrêt sur le réseau, il existe des nombres magiques sur des disques durs, où certains secteurs (par exemple, le MBR) ont les valeurs hexadécimales AA 55 sur ses deux dernières positions d'octets, là-bas. Sont également des numéros magiques dans des fichiers image qui aident les packages logiciels déterminent le type d'image (par exemple, les fichiers GIF commencent par GIF89A ou GIF87A (ASCII), les fichiers JPEG commencent par FF D8 Hexadecimal) et de nombreux autres exemples. Ainsi, les numéros magiques sont un terme très courant ici: -)

2 commentaires

Intéressant. Depuis que je suis déjà passé à partir de cette question, je ne peux pas le vérifier et le marquer, mais parce que vous avez pris le temps de répondre, vous obtenez +1. Peut-être que dans le futur, je vous tiendrez aussi.


@androidDeveloper L'avenir est maintenant ici. Vous devriez probablement attribuer à TOMS sa bonne réponse.



0
votes

Selon le code source de l'URL suivante, le numéro magique est l'ID de l'image d'origine * une constante. Cette valeur est ensuite utilisée pour vérifier une longue int. Si l'INT n'est pas comme prévu, il est considéré comme synchronisé avec le support d'image.

http://grepcode.com/file/repo1.maven.org/maven2/ org.robolectric / android-all / 4.4_r1-robolectric-0 / android / média / minit-dépendant.java # minithumbfile.getmagic% 28Long% 29 p>

// Get the magic number for the specified id in the mini-thumb file.
// Returns 0 if the magic is not available.
public synchronized long getMagic(long id) {
   // check the mini thumb file for the right data.  Right is
   // defined as having the right magic number at the offset
   // reserved for this "id".
   RandomAccessFile r = miniThumbDataFile();
   if (r != null) {
       long pos = id * BYTES_PER_MINTHUMB;
       FileLock lock = null;
       try {
           mBuffer.clear();
           mBuffer.limit(1 + 8);

           lock = mChannel.lock(pos, 1 + 8, true);
           // check that we can read the following 9 bytes
           // (1 for the "status" and 8 for the long)
           if (mChannel.read(mBuffer, pos) == 9) {
               mBuffer.position(0);
               if (mBuffer.get() == 1) {
                   return mBuffer.getLong();
               }
           }
       } catch (IOException ex) {
           Log.v(TAG, "Got exception checking file magic: ", ex);
       } catch (RuntimeException ex) {
           // Other NIO related exception like disk full, read only channel..etc
           Log.e(TAG, "Got exception when reading magic, id = " + id +
                   ", disk full or mount read-only? " + ex.getClass());
       } finally {
           try {
               if (lock != null) lock.release();
           }
           catch (IOException ex) {
               // ignore it.
           }
       }
   }
   return 0;
}


0 commentaires

0
votes

C'est un paramètre un peu étrange ...
Tout en explorant le code source de la galerie,
remarqué que la valeur est en cours de lecture du curseur, mais elle n'est jamais utilisée:

        return new Image(this, mContentResolver, id, cursor.getPosition(),
                contentUri(id), dataPath, mimeType, dateTaken, title,
                orientation);
    } 


0 commentaires