Comment faire cela en C#? J'ai regardé partout sur le web mais je n'ai pas trouvé de réponse.En C#, comment déterminer si une image (jpg, gif ou png) est entrelacée (non progressive) ou non entrelacée (progressive)?
Répondre
Selon le GIF spec, le flux d'octets d'une image gif commence avec 6 octets pour l'en-tête et 7 octets pour le "descripteur d'écran logique".
Le 5ème octet du descripteur d'écran logique est un octet "packed fields". Le premier bit des "champs compressés" est défini si l'image contient une table de couleurs globale. Les trois derniers bits sont un nombre X que vous pouvez utiliser pour calculer la taille de la table de couleurs globale en tant que 3 x 2^(X+1)
.
Puis suit la table de couleurs globale (si elle est présente). Pour éviter cela, vous devez connaître sa taille, calculée comme indiqué ci-dessus. Puis suit un "descripteur d'image" de 10 octets. Le dernier octet de ceux-ci est un autre "champs emballés". Le deuxième bit de cet octet est défini si l'image est entrelacée.
public bool IsInterlacedGif(Stream stream)
{
byte[] buffer = new byte[10];
int read;
// read header
// TODO: check that it starts with GIF, known version, 6 bytes read
read = stream.Read(buffer, 0, 6);
// read logical screen descriptor
// TODO: check that 7 bytes were read
read = stream.Read(buffer, 0, 7);
byte packed1 = buffer[4];
bool hasGlobalColorTable = ((packed1 & 0x80) != 0); // extract 1st bit
// skip over global color table
if (hasGlobalColorTable)
{
byte x = (byte)(packed1 & 0x07); // extract 3 last bits
int globalColorTableSize = 3 * 1 << (x + 1);
stream.Seek(globalColorTableSize, SeekOrigin.Current);
}
// read image descriptor
// TODO: check that 10 bytes were read
read = stream.Read(buffer, 0, 10);
byte packed2 = buffer[9];
return ((packed2 & 0x40) != 0); // extract second bit
}
Sans doute une inspection similaire du flux d'octets peut être fait pour JPG et PNG, si vous lisez ces spécifications.
- 1. Regex pour identifier si une URL est une image ou non?
- 2. Amélioration progressive pour javascript?
- 3. Comment convertir une image WMF en PNG ou JPG sous Windows en utilisant Perl?
- 4. Silverlight WebClient Progressive Télécharger
- 5. Portable SQL pour déterminer si une table existe ou non?
- 6. Comment déterminer si une solution particulière est une application WPF ou une application Non WPF?
- 7. redimensionner dynamiquement des images en php jpg/png/gif
- 8. si l'utilisateur est déjà connecté ou non?
- 9. Convertir une image jpg au format gif, png & bmp en utilisant PHP
- 10. Comment déterminer si la session Windows en cours est verrouillée ou non?
- 11. Dégradation progressive - à prendre en compte
- 12. Vérifiez si ftp est complet ou non?
- 13. Comment vérifier si une méthode python est liée ou non?
- 14. Comment déterminer si une instance de SQL Server est sensible à la casse ou non
- 15. Comment déterminer si une matrice est vide ou non dans matlab?
- 16. Oracle 9i: Comment déterminer, à l'aide de métadonnées, si un index est en cluster ou non?
- 17. Comment puis-je déterminer si l'adresse IP de l'utilisateur est dans une plage accessible ou non?
- 18. Créer une image d'un DIV en JavaScript (GIF/PNG)
- 19. amélioration progressive sur le côté serveur?
- 20. De meilleurs moyens de déterminer si une colonne d'une table est vide ou non?
- 21. ASP.Net MVC, AJAX et amélioration progressive
- 22. Comment vérifier si un lien est actif ou non?
- 23. Silverlight: détermine si DataContext est hérité ou non
- 24. Comment déterminer si SqlConnection est inscrite dans un tx de System.Transactions ou non?
- 25. Comment déterminer si la page ASP.NET est dans le cache ou non?
- 26. Identifiez si un fichier (dll/exe) est verrouillé ou non par un processus ou une bibliothèque
- 27. Dans PowerShell, comment puis-je déterminer si le lecteur actuel est un lecteur réseau ou non?
- 28. Comment déterminer si le résultat sélectionné est vide ou non avec jQuery?
- 29. est donc une publication ou non
- 30. PNG Création en PHP (est-ce différent de gif et jpg?)