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, plus Unknown.
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 it

Construire 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

OverloadUtiliser 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èmeCauseCorrection
Le ImageInfo construit ne correspond pas à un résultat de sonde réelLes instances construites manuellement ne valident pas la cohérence entre les champsUtilisez la construction manuelle uniquement pour les doubles de test, pas comme un substitut à l’exploration de fichiers réels
Appeler Probe alors que DetectFormat suffiraitAnalyse d’en-tête inutile lorsqu’un simple format suffitUtilisez 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 chargeL’en-tête ne correspond à aucune des 11 signatures reconnues, ou le fichier est d’un format complètement différentConfirmez 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éthodeDescription
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 / .FrameCountPropriétés de résultat en lecture seule
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Voir aussi

 Français