Noyau API
API principale
Le FOSS Aspose.Imaging pour l’ensemble de la surface publique de .NET se compose de trois classes : ImageProbe (la façade statique), ImageInfo (la valeur de résultat), et ImageFormat (l’énumération de format). Cette page décrit comment elles s’assemblent en tant que contrat, au-delà de la visite fonction par fonction dans Fonctionnalités et fonctions.
Le contrat à trois classes
ImageProbe— statique, sans état. Chaque appel est indépendant ; il n’y a rien à configurer ou à libérer.ImageInfo— scellé, immuable. Toutes les cinq propriétés (Format,Width,Height,BitDepth,FrameCount) sont en lecture seule une fois construites.ImageFormat— une énumération avec une valeur par format reconnu, plusUnknown.
using Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format; // always set
int? width = info.Width; // set only when the format's header carries itConstruire ImageInfo directement
Le constructeur de ImageInfo est public — seul format est requis, chaque autre paramètre prend la valeur par défaut null. Ceci est utile pour les tests unitaires qui ont besoin d’un résultat de substitution sans interroger un vrai fichier:
using Aspose.Imaging.Foss;
// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);
// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);Il n’existe aucun moyen correspondant de mutate an ImageInfo après la construction — chaque propriété est en lecture seule, ainsi une instance sondée ou construite peut être transmise et mise en cache sans copie défensive.
Choisir la surcharge appropriée
| Overload | Utiliser lorsque |
|---|---|
ImageProbe.ProbeFile(path) | Vous avez un chemin de fichier et vous voulez le ImageInfo complet |
ImageProbe.Probe(stream) | Vous avez déjà un Stream ouvert (seekable ou non) et vous voulez le ImageInfo complet |
ImageProbe.Probe(data) | Vous avez déjà les octets en mémoire et vous souhaitez le ImageInfo complet |
ImageProbe.DetectFormat(stream) / (data) | Vous n’avez besoin de bifurquer que sur ImageFormat — ignorez l’analyse de l’en-tête au-delà de la signature du format |
ProbeFile ouvre et lit le fichier lui-même — il n’est pas nécessaire d’ouvrir un FileStream d’abord simplement pour appeler Probe(stream).
Sondage par lot d’un répertoire
Parce que ImageProbe ne lance jamais d’exception, un scan de répertoire peut l’appeler dans une boucle serrée sans try/catch par fichier:
using Aspose.Imaging.Foss;
foreach (var path in Directory.GetFiles("incoming"))
{
var info = ImageProbe.ProbeFile(path);
if (info.Format == ImageFormat.Unknown)
{
Console.WriteLine($"{path}: not a recognized image format, skipping");
continue;
}
Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}Tout fichier dont l’en-tête ne correspond à aucun des 11 formats reconnus aboutit à ImageFormat.Unknown plutôt que de lever une exception — la boucle ci-dessus n’a jamais besoin d’un bloc catch.
Le contrat qui ne lève jamais d’exception
Ce n’est pas un comportement incident — c’est une partie délibérée du contrat API. Si l’en-tête d’un format reconnu est tronqué ou mal formé en cours d’analyse, ImageProbe renvoie toujours un ImageInfo avec Format défini sur le format qu’il a reconnu; il ne propage pas d’exception d’analyse à l’appelant. Seul Format est garanti — considérez chaque autre propriété comme optionnelle quel que soit le format détecté.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
Le ImageInfo construit ne correspond pas à un résultat de sonde réel | Les instances construites manuellement ne valident pas la cohérence entre les champs | Utilisez la construction manuelle uniquement pour les doubles de test, pas comme un substitut à l’exploration de fichiers réels |
Appeler Probe alors que DetectFormat suffirait | Analyse d’en-tête inutile lorsqu’un simple format suffit | Utilisez DetectFormat si vous ne lisez jamais Width/Height/BitDepth/FrameCount |
Format Unknown pour un fichier que vous vous attendez à ce qu’il soit pris en charge | L’en-tête ne correspond à aucune des 11 signatures reconnues, ou le fichier est d’un format complètement différent | Confirmez le fichier contre le liste des formats pris en charge |
FAQ
Puis-je sous-classer ImageInfo ou ImageProbe?
Non. ImageInfo est sealed et ImageProbe est static — aucun n’est conçu pour la sous-classe ou l’instanciation via l’héritage.
Est-ce que ImageProbe est thread-safe?
ImageProbe ne conserve aucun état mutable entre les appels — chaque appel à Probe, ProbeFile ou DetectFormat est indépendant, ce qui rend les appels concurrents depuis plusieurs threads sûrs.
Dois-je libérer quoi que ce soit?
Non. ImageProbe ne possède aucune ressource IDisposable. Si vous transmettez un Stream que vous avez ouvert vous-même, vous restez responsable de la libération de ce flux — Probe(stream) ne le ferme pas.
API Reference Résumé
| Classe / Méthode | Description |
|---|---|
ImageProbe.ProbeFile(path) | Analyser un fichier par chemin |
ImageProbe.Probe(stream) | Analyser un Stream |
ImageProbe.Probe(data) | Analyser un byte[] |
ImageProbe.DetectFormat(stream) | Format uniquement, provenant d’un Stream |
ImageProbe.DetectFormat(data) | Format uniquement, provenant d’un byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Constructeur public — seul format est requis |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Propriétés de résultat en lecture seule |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |